不同Docker桥接网络下容器间特定端口互通方法咨询
搞定Docker不同桥接网络容器间通信的几种方法
嘿,我来帮你解决这个问题!你已经建了两个独立的桥接网络net1和net2,现在要让container1访问container2的80和4321端口,又不想用macvlan驱动,这几个方案绝对靠谱:
方案1:让容器跨网加入另一个网络
这是最直接省事的方法——把container2也加入net1网络,这样两个容器就处于同一个网络环境里,直接用容器名就能访问对方的端口。
执行这条命令就行:
docker network connect net1 container2
之后container1直接用container2:80或者container2:4321就能访问对应的端口了,Docker自带的DNS会自动把容器名解析成对应的IP,不用记复杂的地址。
方案2:利用宿主机端口映射访问
如果不想让容器跨网络,也可以用你已经配置的端口映射来实现。container2已经把80端口映射到了宿主机的5678端口,那container1可以通过宿主机的IP加上映射端口来访问:
- 访问
container2的80端口:直接用宿主机IP:5678 - 访问
container2的4321端口:你得先给container2加个这个端口的映射,要是容器还没启动,启动的时候加参数:
docker run -it -d --net=net2 --name container2 -p 5678:80 -p 9876:4321 ....
要是容器已经在运行了,就用这条命令更新:
docker container update --publish-add 9876:4321 container2
之后container1用宿主机IP:9876就能访问container2的4321端口了。不过这个方法依赖宿主机网络,性能会比直接跨网络连接稍差一点。
方案3:创建共享桥接网络
如果以后还有更多容器需要跨网络通信,不如建一个专门的共享桥接网络,把两个容器都连上去:
- 先创建共享网络:
docker network create shared-net
- 把两个容器都连接到这个新网络:
docker network connect shared-net container1 docker network connect shared-net container2
这样两个容器在shared-net里能互相访问,同时还保留各自原来的net1和net2网络连接,两边的业务都不受影响,扩展性也更好。
内容的提问来源于stack exchange,提问作者IMTheNachoMan
相关产品推荐
相关产品推荐

