Docker 网桥

标签 docker docker-networking

我正在尝试在 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 进程发生冲突。

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

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

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

关于Docker 网桥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57398397/

相关文章:

mysql - 从容器内连接到远程 mysql 数据库

docker-compose chrome-alpine 使用 nginx

当容器在 localhost 接口(interface)上监听时,Docker 端口转发不起作用

linux - 模拟声卡 ALSA snd-dummy (Docker - Kernel Rebuild - ALSA snd-dummy)

docker - Docker Compose同时使用主机和桥接网络

c# - 网络 docker 容器上的 HttpClient 请求

python - 如何在 Docker 容器中运行 Lektor?

docker - 无法启动运行 ember.js 镜像的 docker 容器,node_modules 为空

docker - 将 docker cli bash 命令转换为 api 以供外部应用程序在生产中使用的最安全方法

docker - 如果零停机时间容器更新有多个实例,docker-compose 网络别名如何工作?