容器无法访问其他容器端口

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