如何配置 docker compose 文件以便它能够同时看到用户定义的网络和默认网络?

如何配置 docker compose 文件以便它能够同时看到用户定义的网络和默认网络?

问题概述

我使用反向代理 ( caddy) 来通过连接容器和反向代理的helloworld特定 docker 网络 ( srv) 为我的应用程序 ( ) 提供服务。它在每个 docker compose 配置文件中定义(每个服务都有一个)。

我想移动到默认的 docker bridge 网络(bridge)而不是将其明确添加到我的 docker compose 文件中。

我今天所拥有的

在此处输入图片描述

使用此拓扑,典型的 docker compose 文件helloworld

networks:
  srv:
    external: true
    name: srv

services:
  helloworld:
    image: helloworld
    container_name: helloworld
    networks:
      - srv

它运行良好,有一个反向代理配置,helloworld:7888当外部调用到达反向代理时可以正确路由。

我希望得到什么

经过一番思考,我想摆脱网络srv逐步将我的 docker compose 堆栈移动到默认bridge网络。

我的理解是,当你有一个没有指定网络的容器时,它会被绑定bridge,你需要公开端口(或者,使用网络host)。

我的问题:我需要将caddy容器连接到这两个网络,并且看起来一旦您network:在 docker compose 文件中指定,您就会失去默认的自动连接bridge

作为参考,我当前的caddy设置是(我删除了不相关的部分,例如卷和环境)

networks:
  srv:
    external: true
    name: srv

services:
  caddy:
    image: lucaslorentz/caddy-docker-proxy:ci-alpine
    container_name: caddy
    ports:
      - 80:80
      - 443:443
      - 2015:2015
    networks:
      - srv
      # - bridge
  • 首先,我认为将其添加bridge到网络列表(上面注释掉)就足够了。bridge无法识别(service "caddy" refers to undefined network bridge: invalid compose project)。

  • 然后我想我可以添加bridgenetworks:定义中,就像srv是,但是我得到了一个network-scoped alias is supported only for containers in user defined networks(我不明白)。

  • 然后我想,最终,caddy暴露80443不提及bridgeandy 在哪里(既不在caddy也不在helloworld配置中)可以工作:默认情况下hellowork会绑定到bridge,并且这种流量会以某种方式进入暴露的caddy端口。但事实并非如此。

我的问题

如何配置 docker compose 文件以便它能够同时看到用户定义的网络和默认网络?

注意:2019 年问题与我的类似。如果答案是“不可能”,我会将我的标记为重复

相关内容