1. ホーム
  2. docker

[解決済み] Dockerコマンドの--net=hostオプションは実際どうなのか?

2022-03-11 19:31:35

質問

私は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の 808050000 が公開されます。これらのポートは、そのブリッジネットワーク上でコンテナのために開かれています。そのため、そのブリッジネットワーク内のすべてのものは、コンテナのポート 808050000 . ブリッジネットワーク内のすべてのものは、プライベートレンジの "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にアクセスしています。私が思うに このブログ も理解しやすいと思います。