【问题标题】:How to join the default bridge network with docker-compose v2?如何使用 docker-compose v2 加入默认桥接网络?
【发布时间】:2017-09-30 22:24:52
【问题描述】:

我尝试设置一个nginx-proxy 容器以通过端口 80 上的子域而不是特殊端口访问我的其他容器。你可以猜到,我无法让它工作。

我对 docker 本身有点陌生,发现写docker-compose.yml 文件对我来说更舒服,所以我不必经常写长的docker run ... 命令。我认为使用dockerdocker-compose 启动容器的方式没有区别。但是,我注意到的一个区别是,使用docker 启动容器不会创建任何新网络,但使用docker-compose 之后会有一个xxx_default 网络。

我读到不同网络上的容器无法相互访问,这可能是 nginx-proxy 没有将请求转发到其他容器的原因。但是,我无法找到一种方法来配置我的 docker-compose.yml 文件以不创建任何新网络,而是像 docker run 那样加入默认的桥接网络。

我尝试了以下方法,但它导致错误提示我无法像这样加入系统网络:

networks:
  default:
    external:
      name: bridge

我也试过network_mode: bridge,但这似乎没有任何区别。

我如何必须编写docker-compose.yml 文件才能不创建新网络,或者这根本不可能?

额外问题:dockerdocker-compose 之间是否还有其他我应该知道的区别?

【问题讨论】:

  • v1 format 撰写文件不会创建新网络,但需要设置 links 才能与默认桥上的其他容器通信。
  • v1 即将被弃用,应避免使用。
  • 是的,我使用的是版本 2 格式。感谢您的提示。
  • 我刚刚将该语法用于版本 3,它工作得很好。我没有使用默认桥,而是另一个由包含 nginx 的 docker-compose.yml 创建的桥。剩下的问题是 iit 中带有下划线的主机名

标签: docker docker-compose jwilder-nginx-proxy


【解决方案1】:

network_mode: bridge 添加到docker-compose.yml 中的每个服务将停止撰写网络。

如果任何服务未配置此网桥(或主机),则会创建一个网络。

经过测试和确认:

version: "2.1"

services:
  app:
    image: ubuntu:latest
    network_mode: bridge

【讨论】:

  • 哦,这可能是问题所在,我想我只将它添加到其中一项服务中。我稍后会尝试并检查它是否解决了问题。
  • 我忘了在这里报告...实际上是问题所在。 :)
  • 这会破坏发现。因此,如果您有 >1 个容器需要相互通信,则它不起作用。
  • @JohnEikenberry 虽然它可以使发现变得棘手,但它不会破坏它。用户仍然可以在 compose 中使用links 语法。
  • Docker 堆栈不支持network_mode,是否有类似的解决方案可以使其与它们一起使用?
猜你喜欢
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
相关资源
最近更新 更多