Docker 公開ポート経由で SSH ローカル トンネリングにアクセスする

Docker 公開ポート経由で SSH ローカル トンネリングにアクセスする

次のような設定になっています:

[OpenSSH server] <---> [Docker container with SSH client] <---> [host machine]

私の Docker コンテナは、一種の SSH 接続マネージャーです。ポートを転送している OpenSSH サーバー上で実行されているサービスは、Web サーバーです。

コンテナ内からは、curlトンネルポートを正常に使用できます。しかし、同じポートをホストに公開し、curlホストからアクセスしようとすると、

curl: (56) Recv failure: Connection reset by peer

これはトンネルを設定するために使用している SSH コマンドです:

ssh -nNT -L 3000:*:9413 OPENSSH_SERVER_URL

このコンテナを実行するには

docker run --rm --name test -p 3000:3000 ssh-connection-manager

コンテナにログインすると、curl応答が得られます:

docker exec -it --entrypoint sh test
# curl localhost:3000
Hello!

公開されたポートを介してホストから同じことを実行することはできません。

$ curl localhost:3000
curl: (56) Recv failure: Connection reset by peer

何が足りないのでしょうか? SSH クライアントの接続オプションか OpenSSH サーバーの構成の問題だと思いますが、よくわかりません。

関連情報