ホストでsshポートフォワーディングした先にDockerコンテナ内から接続する方法をまとめました。
この記事で利用する「ホスト」はDockerコンテナに対するホストを指します。
手順
1. ホスト側でlo0にエイリアスをはる
ホスト側
sudo ifconfig lo0 alias 10.200.10.10/24
上では、10.200.10.10としていますがプライベートipであればなんでも良いです。
2. ホスト側でsshポートフォワーディング
ホスト側
ssh -f -N -g -L 8080:localhost:80 リモートサーバ
今回は、リモートサーバの80番ポートをローカル(ホスト)の8080番ポートにバインディングします。
ココで重要なのは-g
オプションです。Docker内からのホストへの接続時に、手順1で示したエイリアスへ接続します。この通信は外部からの接続とみなされてしまいます。そこで、外部からの接続に対応するために-g
オプションが必要となります。詳しくはman ssh
で-g
オプションを確認してください。
3. Dockerコンテナ内から接続
Docker内
curl 10.200.10.10:8080
手順1で貼ったエイリアスにDocker内からアクセスするとリモートサーバの80番ポートにつながります。
まとめ
上の方法で、ポート制限がなされたサーバなどにsshポートフォワーディング経由でDocker内から接続することができるようになります。もしもっといい方法があったら教えてください。