Docker で運用している Redmine の MySQL サーバーに Sequel Pro からアクセスしようとしたら、以下のエラーメッセージが表示されて接続できない。
Lost connection to MySQL server at 'reading initial communication packet', system error: 0
外部サーバーに SSH で接続してコンソールから mysql コマンドで接続することは成功している。
mysql -h 127.0.0.1 -u root -p
MySQL サーバーの接続ホスト名を 0.0.0.0
や 172.18.0.2
(コンテナの IP アドレス) などにしてみるも変わらず。
grep refused /var/log/secure
Feb 27 05:49:29 rm sshd[23858]: refused local port forward: originator 127.0.0.1 port 54698, target 172.18.0.2 port 3306
Feb 27 06:34:16 rm sshd[25509]: refused local port forward: originator 127.0.0.1 port 55548, target 0.0.0.0 port 3306
Feb 27 06:34:40 rm sshd[25530]: refused local port forward: originator 127.0.0.1 port 55565, target 127.0.0.1 port 3306
/var/log/secure
を覗くと refused local port forward
というエラーが出力されているので検索すると /etc/ssh/sshd_config
の AllowTcpForwarding
ディレクティブが影響するよう。
grep ^AllowTcpForwarding /etc/ssh/sshd_config
AllowTcpForwarding no
Docker が動作しているホスト OS の sshd_config
の AllowTcpForwarding
の値が no
になっていた。
AllowTcpForwarding
は TCP 転送を許可するかどうかを指定する。 1
sed -i '/^AllowTcpForwarding/ s/no/yes/' /etc/ssh/sshd_config
systemctl restart sshd
AllowTcpForwarding
の値を yes
に変更して sshd を再起動したところ、無事に Sequel Pro で Docker コンテナの MySQL サーバーに接続することができた。