Edited at

外部サーバーの Docker の MySQL に Sequel Pro から接続する

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.0172.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_configAllowTcpForwarding ディレクティブが影響するよう。

grep ^AllowTcpForwarding /etc/ssh/sshd_config

AllowTcpForwarding no

Docker が動作しているホスト OS の sshd_configAllowTcpForwarding の値が no になっていた。

AllowTcpForwarding は TCP 転送を許可するかどうかを指定する。 1

sed -i '/^AllowTcpForwarding/ s/no/yes/' /etc/ssh/sshd_config

systemctl restart sshd

AllowTcpForwarding の値を yes に変更して sshd を再起動したところ、無事に Sequel Pro で Docker コンテナの MySQL サーバーに接続することができた。