容器无法访问其他容器端口
container is not able to access other container port
我有一个容器,运行s jupyter-hub 在 443 上并映射到主机上的 1443。我正在尝试 运行 此服务器位于另一个容器中的 apache 后面。但是,这两个容器无法相互通信。
我试过为每个容器设置 iptables,但没有用。
sudo iptables -A INPUT -m state -s 172.17.0.2 --state NEW -mtcp -p tcp --dport 1443 -j ACCEPT
172.17.0.2是jupyterhub容器的IP。
2 个容器无法相互通信的问题是由于它们不在同一个 docker 网络中。以下是您必须执行的操作:
- 列出所有可用网络:
docker network ls
- 找出
apache
容器在 运行 中的哪个网络
docker inspect <apache_container_id> -f "{{json .NetworkSettings.Networks }}"
- 如果
apache
容器在 host
网络中,创建一个新网络并将其附加到该容器
docker network create apache_network
docker network connect apache_network <apache_container_id>
- 在同一网络中启动您的
jupyter-hub
容器 docker run ... --network apache_network ...
- 这 2 个容器无法使用它们的容器名称相互通信。
在处理容器时尽量使用 DNS 而不是 IP,因为 IP 可能会经常变化。
您需要创建一个允许容器相互通信的用户定义网络。
当您执行 docker 运行 时,请使用您的用户定义网络提供网络参数。
请看下面的一个简单例子。
docker network create --driver bridge my_custom_network
docker run --network=my_custom_network -itd --name=container1 busybox
docker run --network=my_custom_network -itd --name=container2 busybox
docker attach container2
/ # ping container1
PING container3 (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.113 ms
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.147 ms
64 bytes from 172.19.0.2: seq=2 ttl=64 time=0.146 ms
64 bytes from 172.19.0.2: seq=3 ttl=64 time=0.146 ms
下面 link 提供了更多详细信息:
https://docs.docker.com/v17.09/engine/userguide/networking/#user-defined-networks
我有一个容器,运行s jupyter-hub 在 443 上并映射到主机上的 1443。我正在尝试 运行 此服务器位于另一个容器中的 apache 后面。但是,这两个容器无法相互通信。
我试过为每个容器设置 iptables,但没有用。
sudo iptables -A INPUT -m state -s 172.17.0.2 --state NEW -mtcp -p tcp --dport 1443 -j ACCEPT
172.17.0.2是jupyterhub容器的IP。
2 个容器无法相互通信的问题是由于它们不在同一个 docker 网络中。以下是您必须执行的操作:
- 列出所有可用网络:
docker network ls
- 找出
apache
容器在 运行 中的哪个网络
docker inspect <apache_container_id> -f "{{json .NetworkSettings.Networks }}"
- 如果
apache
容器在host
网络中,创建一个新网络并将其附加到该容器
docker network create apache_network
docker network connect apache_network <apache_container_id>
- 在同一网络中启动您的
jupyter-hub
容器docker run ... --network apache_network ...
- 这 2 个容器无法使用它们的容器名称相互通信。
在处理容器时尽量使用 DNS 而不是 IP,因为 IP 可能会经常变化。
您需要创建一个允许容器相互通信的用户定义网络。 当您执行 docker 运行 时,请使用您的用户定义网络提供网络参数。 请看下面的一个简单例子。
docker network create --driver bridge my_custom_network
docker run --network=my_custom_network -itd --name=container1 busybox
docker run --network=my_custom_network -itd --name=container2 busybox
docker attach container2
/ # ping container1
PING container3 (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.113 ms
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.147 ms
64 bytes from 172.19.0.2: seq=2 ttl=64 time=0.146 ms
64 bytes from 172.19.0.2: seq=3 ttl=64 time=0.146 ms
下面 link 提供了更多详细信息: https://docs.docker.com/v17.09/engine/userguide/networking/#user-defined-networks