2017-04-10 15 views
15

私はDockerの初心者です。このオプションがdocker runコマンドで何をしているのかわかりませんでした。Dockerコマンドの--net = hostオプションは本当に何をしますか?

ポートを指定せずにDockerコンテナ上で実行されているアプリケーションにアクセスすることはできますか?たとえば、ドッカーの実行コマンドで-p 8080:8080というオプションを使用してポート8080のドッカーイメージ経由でデプロイしたWebアプリケーションを実行すると、Dockerコンテナのip/theWebAppNameの8080ポートでアクセスする必要があることがわかります。しかし、私は実際にはどのように--net=hostオプションが動作するのか考えることができません。

答えて

34

ドッキングウィンドウのインストール後は、デフォルトでは3つのネットワークがあります。

docker network ls 
NETWORK ID   NAME    DRIVER    SCOPE 
f3be8b1ef7ce  bridge    bridge    local 
fbff927877c1  host    host    local 
023bb5940080  none    null    local 

私はこの単純なを維持しようとしているが。したがって、デフォルトでコンテナを開始すると、ブリッジ(docker0)ネットワーク内にコンテナが作成されます。ジェンキンスのdockerfileで

$ docker run -d jenkins 
1498e581cdba  jenkins    "/bin/tini -- /usr..." 3 minutes ago  Up 3 minutes  8080/tcp, 50000/tcp friendly_bell 

ポート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ポート上で自分のサーバーをaccesingていました。私はthis blogがそれをより良く理解するのにも役立つと思います。

+0

Dockerfileの中にオプション '--net = host'を追加することはできますか? – AnirbanDebnath

+3

@AnirbanDebnathドッカーファイルに入れることはできませんが、ドッカーv17以降、ドッカービルドのパラメータとして使用できます: 'docker build --network = host'。ドッカービルドの指定されたホストネットワークは、イメージを構築するために必要なパッケージをダウンロードするためのものです。ホストネットワーク上でコンテナを実行する場合は、--network = hostオプションを定義する必要があります。 – lvthillo

関連する問題