[解決済み] Dockerコマンドの--net=hostオプションは実際どうなのか?
質問
私はDockerの初心者です。Dockerのrunコマンドでこのオプションが何をするものなのか、深いところで明確な説明が見つからず、少し戸惑っています。
ポートを指定せずに、ドッカーコンテナ上で動作しているアプリケーションにアクセスするために使用できますか?例えば、DockerイメージにデプロイされたWebアプリケーションを8080ポートで実行する場合、オプション
-p 8080:8080
docker runコマンドで、私はDockerコンテナのip /theWebAppName上の8080ポートにアクセスする必要があることを知っています。しかし、私は本当に方法を考えることはできません。
--net=host
オプションが動作します。
解決方法は?
dockerのインストール後、デフォルトで3つのネットワークがあります。
docker network ls
NETWORK ID NAME DRIVER SCOPE
f3be8b1ef7ce bridge bridge local
fbff927877c1 host host local
023bb5940080 none null local
私はこれをシンプルにしようと思っています。そのため、デフォルトでコンテナを起動すると、ブリッジ(docker0)ネットワークの内部に作成されます。
$ docker run -d jenkins
1498e581cdba jenkins "/bin/tini -- /usr..." 3 minutes ago Up 3 minutes 8080/tcp, 50000/tcp friendly_bell
jenkinsのdockerfileには、portsの
8080
と
50000
が公開されます。これらのポートは、そのブリッジネットワーク上でコンテナのために開かれています。そのため、そのブリッジネットワーク内のすべてのものは、コンテナのポート
8080
と
50000
. ブリッジネットワーク内のすべてのものは、プライベートレンジの
"Subnet": "172.17.0.0/16",
外部からアクセスする場合は、ポートのマッピングを
-p 8080:8080
. これは、コンテナのポートを実際のサーバ(ホストネットワーク)のポートにマッピングすることになります。したがって、サーバにアクセスするときは
8080
はブリッジネットワークにルーティングされ、ポート
8080
.
これで、ホストネットワークもできました。これは、コンテナのネットワークをコンテナ化するものではありません。したがって、ホストネットワークでコンテナを起動すると、次のようになります(最初のものです)。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1efd834949b2 jenkins "/bin/tini -- /usr..." 6 minutes ago Up 6 minutes eloquent_panini
1498e581cdba jenkins "/bin/tini -- /usr..." 10 minutes ago Up 10 minutes 8080/tcp, 50000/tcp friendly_bell
違いは、ポートの違いです。コンテナは今、ホストネットワークの中にあります。そのため、もしあなたがポート
8080
にアクセスすると、すぐにコンテナにアクセスできるようになります。
$ sudo iptables -I INPUT 5 -p tcp -m tcp --dport 8080 -j ACCEPT
ポートをオープンしました
8080
にアクセスしたところ、ポート
8080
私のjenkinsにアクセスしています。私が思うに
このブログ
も理解しやすいと思います。
関連
-
[解決済み] Dockerはインストールされているのに、Docker Composeがインストールされていないのはなぜですか?
-
[解決済み] kubernetesでPodを停止/一時停止する方法
-
[解決済み] 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はインストールされているのに、Docker Composeがインストールされていないのはなぜですか?
-
[解決済み] 不明な機関によって署名された "docker pull "証明書
-
[解決済み] アルパインリナックスにGoをインストールする方法
-
[解決済み】Dockerfileにイメージ名を設定する方法は?
-
[解決済み】リモートレジストリにあるDockerイメージのすべてのタグを一覧表示するには?
-
[解決済み】Dockerコンテナでボリュームをリストアップする方法は?
-
[解決済み】Docker Registry v2 でイメージのリストを取得する方法
-
[解決済み】Dockerのイメージを削除する方法を教えてください。
-
[解決済み】dockerの内部からdockerを実行しても大丈夫ですか?
-
[解決済み】Kubernetes イメージを更新するデプロイメントの作り方