web-dev-qa-db-ja.com

ホストからdockerコンテナーにpingを実行するにはどうすればよいですか

MacでUbuntu Dockerコンテナを作成しました

CONTAINER ID  IMAGE   COMMAND      CREATED         STATUS         PORTS                 NAMES
5d993a622d23  ubuntu  "/bin/bash"  42 minutes ago  Up 42 minutes  0.0.0.0:123->123/tcp  kickass_ptolemy

ポートを123に設定します。

私のコンテナIPは172.17.0.2

docker inspect 5d993a622d23 | grep IP
"LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,

私のMacでは、コンテナにpingを試行します。

Ping 172.17.0.2、icmp_seq 0のリクエストタイムアウトが発生しました。..

私は何をすべきか?したがって、ローカルマシンは、インストールしたコンテナにpingを実行できます。プレーンなubuntuシステムであるコンテナにアプリをインストールしていませんか?

11
Neil

Mac のDockerでコンテナインターフェイスに直接pingまたはアクセスすることはできません。

現在の最善の解決策は、別のコンテナからコンテナに接続することです。現在、OSXのAppleはまだ解決されていません。この要件を追跡していますが、現時点では何もできません。

Dockerツールボックス/ VirtualBox

Docker Toolbox、VirtualBoxまたはVirtualBox経由のDocker Machineを実行する場合、VM( a Vagrant definition など) "をセットアップできます。」ホストオンリーネットワーク」 を介してDocker VMネットワークにアクセスします。

default boot2docker VMを使用している場合は、既存のインターフェイスを変更しないでください。多くのDockerユーティリティが機能しなくなるため、新しいインターフェイスを追加します。

また、VMの新しいIPアドレスを介してMacからコンテナネットワークへのルーティングをセットアップする必要があります。私の場合、Dockerネットワークの範囲は172.22.0.0/16とVMのホスト専用アダプタIPは192.168.99.100

Sudo route add 172.22.0.0/16 192.168.99.100

永続ルートをosx に追加するのはもう少し複雑です

その後、Macからコンテナにアクセスできます

machost:~ ping -c 1 172.22.0.2
PING 172.22.0.2 (172.22.0.2): 56 data bytes
64 bytes from 172.22.0.2: icmp_seq=0 ttl=63 time=0.364 ms

--- 172.22.0.2 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.364/0.364/0.364/0.000 ms
16
Matt

別の方法として、コンテナにbashシェルが組み込まれている場合、次の方法でアクセスできます。

docker exec -it <CONTAINER ID> bash

そして、あなたはあなたの仮想IPをpingすることができます

このシナリオで機能します:

  1. Windowsホスト
  2. Linux VM Windowsホストにインストール
  3. LinuxにインストールされたDockerコンテナーVM Host

これに注意する必要があります。コンテナーは隔離されたネットワークにありますが、Dockerコンテナーホストアダプターを介してインターネットに接続されているため、カーネルlinuxをネットワークで使用可能にしてからLinux VMで使用可能にする必要があります:

sysctl net.ipv4.conf.all.forwarding = 1

Sudo iptables -P FORWARD ACCEPT

Windowsホストで、コンテナネットワークのルートを追加する必要があります:route add "Docker container network" "Linux VM IP"たとえば

ルート追加172.17.0.0/16 192.168.1.20

ブロッククォート

0
Ángel Ugarte

セットアップ:

PC-A aはdockerホスト、PC-Bはネットワーク内の別のPCです。 PC-Bからdockerのコンテナーにping /アクセスするには、ホストで以下のiptables- rulesを実行します。

iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT

iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT

注:eth0はホストのインターフェースであり、docker0はdockerの仮想デフォルトブリッジです。

PC-Bにルートを追加します

route add -net <dockerip> netmask <net mask> gw <docker's Host>

コンテナサービスに直接ping /アクセスします。

0
Guru