[解決済み] ライブDockerコンテナでポートを公開する
質問
完全な仮想マシンのように動作するDockerコンテナを作成しようとしています。Dockerfileの中でEXPOSE命令を使ってポートを公開できることは知っていますし、また、Dockerfileの中で
-p
フラグを
docker run
を使用してポートを割り当てることができますが、コンテナが実際に実行されると、追加のポートをライブで開く/マッピングするコマンドはありますか?
例えば、sshdが動作しているDockerコンテナがあるとします。そのコンテナを使用している他の誰かが、sshでログインしてhttpdをインストールしたとします。コンテナ上のポート80を公開し、それをホスト上のポート8080にマップすることで、コンテナを再起動することなく、コンテナ内で動作するWebサーバにアクセスできるようにする方法はないでしょうか?
解決方法は?
Docker経由ではできませんが、ホストマシンからコンテナの未公開ポートにアクセスすることは可能です。
コンテナのポート8000で何かが動いている場合、そのコンテナに対して
wget http://container_ip:8000
コンテナのIPアドレスを取得するために、2つのコマンドを実行します。
docker ps
docker inspect container_name | grep IPAddress
内部的には、Dockerはイメージを実行するときにiptablesを呼び出すようにシェルしているので、多分これの何らかのバリエーションがうまくいくでしょう。
コンテナのポート8000をlocalhostのポート8001で公開すること。
iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
この問題を解決する一つの方法は、別のコンテナを希望のポートマッピングでセットアップし、そのコンテナの iptables-save コマンドを実行します (ただし、Docker プロキシを経由するトラフィックを強制する他のオプションのいくつかを削除する必要がありました)。
注意:これはdockerを破壊しているので、青い煙が出る可能性があることを認識した上で行う必要があります。
または
もうひとつの方法は、(新しい? 0.6.6 以降?) -P オプションを見て、ランダムなホストポートを使い、それを配線することです。
または
0.6.5 では、LINKs 機能を使って、既存のコンテナに話しかける新しいコンテナを立ち上げ、そのコンテナの -p フラグにいくつかの追加リレーを行うことができるのでは?(私はまだLINKsを使ったことがありません)。
または
docker 0.11では?
docker run --net host ..
を使うと、コンテナをホストのネットワークインターフェースに直接アタッチすることができます (つまり、net は名前空間ではありません)。
すべて
ポートが公開されます。
関連
-
[解決済み] docker の多段ビルド Go イメージ - x509: 証明書は不明な機関によって署名されました。
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Docker共有ボリュームのパーミッションを管理する(最良の)方法は何ですか?
-
[解決済み】Dockerは仮想マシンとどう違うの?
-
[解決済み】Dockerコンテナからホストポートにアクセスする方法
-
[解決済み】Dockerコンテナにホストポートを転送する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Docker: apt-utilsのインストールに問題があります。
-
[解決済み】ドッカーコンテナがすぐに終了してしまう理由
-
[解決済み] Docker Networking が無効になっています。警告: IPv4 転送が無効になっています。ネットワーキングは機能しません
-
[解決済み] アルパインイメージでdockerを使ってbashをユーザrootで実行するには? su: suidでないと正常に動作しません。
-
[解決済み] ポッドで "ErrImageNeverPull "を取得する
-
[解決済み] ドッカーコンテナ : iptables を実行中です。その名前のチェーン/ターゲット/マッチがない
-
docker encountered problem 4: yaml: line 1: mapping values are not allowed in this context.
-
エラー:入力デバイスはTTYではありません。
-
クラウドネイティブ時代に求められるコアスキル Docker Advanced (Dockerネットワーク詳解)
-
[解決済み] 既存のDockerコンテナにポートマッピングを割り当てるにはどうしたらいいですか?