Docker 网桥

Docker network bridge

我正在尝试 运行 在 docker 上使用相同端口的多个容器。

为此,我创建了一个桥接模式的网络并指定了一个子网。

docker network create -d --subnet 192.168.99.0/24 mynetwork

然后使用静态 IP 将 docker 个容器连接到它。

docker run -i -t -d -p 2377:2377 -p 7946:7946 -p 4789:4789-name container image
docker network connect --ip 192.168.99.98 mynetwork container

我用三个容器(使用不同的 IP)完成了此操作,在启动第二个容器后我得到了:

Error response from daemon: driver failed programming external connectivity on endpoint container(...): Bind for 0.0.0.0:7946 failed: port is already allocated

就我而言,由于桥接模式,我不应该收到此错误。

docker run -p选项在主机系统上分配一个端口;这些在所有容器之间共享,独立于它们使用的 Docker-private 网络。这些也会与主机上的非 Docker 进程 运行ning 发生冲突。

如果您的目标只是能够在同一网络上的容器之间进行通信,则根本不需要 -p 选项。他们可以使用彼此的 --name 和容器内服务正在侦听的端口进行连接。

如果您尝试同时 运行 多个 Docker 容器堆栈,您需要决定主机上的哪个特定实例端口 2377 将路由到,并更改另一个容器' -p 选项。

专门设置 Docker-内部私有 IP 地址(或者根本不用担心它们)几乎从不需要。我会删除那些 --subnet--ip 选项。要在容器之间进行通信,请将它们放在同一个网络上,如上所述;从外面你需要一个(唯一的)-p 选项。