私はDockerに関するいくつかのことを理解しようとしています。
コンテナがどのネットワークに接続されているかを確認するには、コンテナが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 }}"
ネットワークはdocker container inspect $id
出力に表示されます。$id
はコンテナIDまたはコンテナ名です。名前はNetworkSettings-> Networksセクションの下にリストされています。
docker network connect $network_name $container_name
を使用して、コンテナにネットワークを追加できます。同様に、docker network disconnect $network_name $container_name
はコンテナーをdockerネットワークから切断します。
コンテナは、同じドッカーネットワーク上にあり、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