如何使用 docker-compose v3 加入默认网桥和用户定义的网桥?

Ant*_*ony 7 docker docker-compose docker-networking

我有一个 docker-compose yml,其中有几个服务位于用户定义的网络中(在桥接模式下)。我想在默认 docker 网桥上连接我的服务,以便向外界公开一个端口。

总而言之,有一个我想要做的具体例子:

services:
  service1:
    networks:
      - my_network

  service2:
    networks:
      - my_network
      - bridge
    ports:
      8080:8080
Run Code Online (Sandbox Code Playgroud)

如此处所述我尝试了以下操作,但导致此错误:ERROR: for app network-scoped alias is supported only for containers in user defined networks

networks:
  my_network:
    driver: bridge
  bridge:
    external: true
Run Code Online (Sandbox Code Playgroud)

我还尝试了如何使用 docker-compose v2 加入默认网桥网络中提出的解决方案,但您不能在 docker compose 中混合使用关键字network_mode: bridge和关键字networks

我也尝试在docker-compose.yml中去掉对默认网桥网络的引用,并在启动服务后将我的service2容器添加到默认网桥中,例如:

docker-compose up
docker network connect bridge service2
Run Code Online (Sandbox Code Playgroud)

这种方法有效,我可以从外部访问我在service2上暴露的端口,我最终得到:

docker inspect service2


"Networks": {
    "bridge": {
        ...
     },
     "my_network": {  
          ...
      }
}
Run Code Online (Sandbox Code Playgroud)

但我不想在docker network connect bridge service2每次启动服务时都执行。

我知道我的问题与这个问题非常相似:如何在 Docker-Compose 中一起使用主机网络和任何其他用户定义的网络?,除了我不想使用主机模式。

有什么办法可以同时连接用户定义网络和默认网桥上的服务?

Wie*_*Wie 0

我认为您不必位于默认桥接网络上即可将端口从容器发布到您的计算机。

  • 是的,你说得对,谢谢你的回答,解决了我的问题。但是,如果有人仍然想将服务连接到用户定义的网桥和默认网桥怎么办? (5认同)
  • @Anthony,看起来这是不可能的,请参阅https://github.com/docker/compose/issues/3012和https://github.com/docker/compose/issues/3476 (3认同)