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システムであるコンテナにアプリをインストールしていませんか?
Mac のDockerでコンテナインターフェイスに直接pingまたはアクセスすることはできません。
現在の最善の解決策は、別のコンテナからコンテナに接続することです。現在、OSXのAppleはまだ解決されていません。この要件を追跡していますが、現時点では何もできません。
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
別の方法として、コンテナにbashシェルが組み込まれている場合、次の方法でアクセスできます。
docker exec -it <CONTAINER ID> bash
そして、あなたはあなたの仮想IPをpingすることができます
このシナリオで機能します:
これに注意する必要があります。コンテナーは隔離されたネットワークにありますが、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"たとえば
ブロッククォート
セットアップ:
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 /アクセスします。