web-dev-qa-db-ja.com

Docker:コンテナが入っているネットワークを見つける方法は?

私はDockerに関するいくつかのことを理解しようとしています。

  1. コンテナが入っているネットワークを見つけるにはどうすればよいですか?
  2. コンテナを動的にデタッチし、他のネットワークにアタッチできますか?どうやって?
  3. 2つのコンテナを実行している場合、2つのコンテナが同じネットワークにあるかどうかを確認する方法は? pingを実行できますか?
20
theCode

コンテナがどのネットワークに接続されているかを確認するには、コンテナがc1

$ docker inspect c1 -f "{{json .NetworkSettings.Networks }}"

コンテナを最初のネットワークから切断するには(最初のネットワークがtest-net):

$ docker network disconnect test-net c1

次に、それを別のネットワークに再接続するには(test-net-2と呼ばれます):

$ docker network connect test-net-2 c1

2つのコンテナ(またはそれ以上)が一緒にネットワーク上にあるかどうかを確認するには:

$ docker network inspect test-net -f "{{json .Containers }}"
34
johnharris85
  1. ネットワークはdocker container inspect $id出力に表示されます。$idはコンテナIDまたはコンテナ名です。名前はNetworkSettings-> Networksセクションの下にリストされています。

  2. docker network connect $network_name $container_nameを使用して、コンテナにネットワークを追加できます。同様に、docker network disconnect $network_name $container_nameはコンテナーをdockerネットワークから切断します。

  3. コンテナは、同じドッカーネットワーク上にあり、ICCを無効にしていない場合、IPアドレスで相互にpingできます。 「bridge」という名前のデフォルトネットワーク上にない場合は、付属のDNSディスカバリーを使用して、コンテナー名またはネットワークエイリアスでコンテナーにpingおよび接続できます。 docker network create $network_nameを使用して作成した新しいネットワークでは、DNSディスカバリーがオンになっています。ブリッジドライバーを使用している場合でも、「bridge」という名前のネットワークとは別にする必要があります。コンテナは、同じDockerネットワーク上にある限り、Dockerでポートを公開または公開しなくても、TCPポートを介して接続できます。

次に、netcatを使用したネットワーク接続のテストの低レベルの例を示します。

$ docker network create test-net

$ docker run --net test-net --name nc-server -d nicolaka/netshoot nc -vl 8080
17df24cf91d1cb785cfd0ecbe0282a67adbfe725af9a1169f0650a022899d816

$ docker run --net test-net --name nc-client -it --rm nicolaka/netshoot nc -vz nc-server 8080
Connection to nc-server 8080 port [tcp/http-alt] succeeded!

$ docker logs nc-server
Listening on [0.0.0.0] (family 0, port 8080)
Connection from nc-client.test-net 37144 received!

$ docker rm nc-server
nc-server

$ docker network rm test-net
7
BMitch