次のような設定になっています:
[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 サーバーの構成の問題だと思いますが、よくわかりません。