Linux で Docker をネイティブに実行する場合、インターフェイスの IP アドレスを使用してホスト サービスにアクセスできdocker0
ます。コンテナー内からは、これがデフォルト ルートになります。
たとえば、私のシステムでは:
$ ip addr show docker0
7: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::f4d2:49ff:fedd:28a0/64 scope link
valid_lft forever preferred_lft forever
そしてコンテナ内:
# ip route show
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 src 172.17.0.4
シンプルなシェル スクリプトを使用して、この IP アドレスを簡単に抽出できます。
#!/bin/sh
hostip=$(ip route show | awk '/default/ {print $3}')
echo $hostip
iptables
Docker コンテナからの接続を許可するには、ホストのルールを変更する必要がある場合があります。このような何かがトリックを行います:
# iptables -A INPUT -i docker0 -j ACCEPT
これにより、Docker コンテナーからホスト上の任意のポートへのアクセスが許可されます。ご了承ください:
MacOSまたはWindows 18.03 以降でDocker を使用している場合は、マジック ホスト名 に接続できますhost.docker.internal
。
--net=host
最後に、Linux では;を設定することで、ホスト ネットワークの名前空間でコンテナーを実行できます。この場合localhost
、ホスト上はコンテナ内と同じlocalhost
であるため、コンテナ化されたサービスはコンテナ化されていないサービスのように機能し、追加の構成なしでアクセスできます。