Docker 経由でこれを行うことはできませんが、ホスト マシンからコンテナの公開されていないポートにアクセスできます。
ポート 8000 で何かが実行されているコンテナーがある場合は、実行できます。
wget http://container_ip:8000
コンテナーの IP アドレスを取得するには、次の 2 つのコマンドを実行します。
docker ps
docker inspect container_name | grep IPAddress
内部的には、Docker はイメージを実行するときに iptables を呼び出すシェルを実行するため、これに関するいくつかのバリエーションが機能する可能性があります。
ローカルホストのポート 8001 でコンテナーのポート 8000 を公開するには:
iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
これを解決する 1 つの方法は、必要なポート マッピングを使用して別のコンテナーをセットアップし、 iptables-saveコマンドの出力を比較することです(ただし、トラフィックを強制的に docker プロキシ経由にする他のオプションのいくつかを削除する必要がありました)。
注: これは docker を破壊するため、青い煙が発生する可能性があることを認識して実行する必要があります。
また
もう 1 つの方法は、(新しい? post 0.6.6?) -P オプションを調べることです。これは、ランダムなホスト ポートを使用し、それらを接続します。
また
0.6.5 では、LINKs 機能を使用して、既存のコンテナーと対話する新しいコンテナーを起動し、そのコンテナーの -p フラグに追加の中継を行うことができますか? (私はまだ LINK を使用していません。)
また
ドッカー0.11で?を使用docker run --net host ..
して、コンテナーをホストのネットワーク インターフェイスに直接接続することができます (つまり、net は名前空間ではありません)。したがって、コンテナーで開くすべてのポートが公開されます。