为什么我必须在docker-compose.yml中两次声明网络状态?

问题描述 投票:0回答:1

我有点困惑。在docker-compose.yml文件中:

version: "3"
networks:
  proxy:
    external: true
services:
  eliko:
    image: irmscher/eliko:v1
    labels:
      - traefik.backend=eliko
      - traefik.frontend.rule=Host:eliko.bloggercraft.com
      - traefik.docker.network=proxy
    networks:
      - proxy

为什么我必须指定网络两次?第一次在networks: proxy和第二次服务networks: -proxy

我实际上事先用docker network create proxy创建了'代理'网络。我认为networks:在docker-compose CREATE网络中,所以我决定删除它,只留下我的服务(eliko)标题中的网络名称。但后来我收到了一个错误:ERROR: Service "eliko" uses an undefined network "proxy"

所以我的问题是......这究竟是做什么的:

networks:
  proxy:
    external: true

据我所知,这是:

    networks:
      - proxy

连接到网络,所以以前应该创建网络?如果我用docker network create创建一个网络,它是相同的还是?

这里有点困惑......

docker networking docker-compose
1个回答
1
投票

顶级的networks节告诉码头工作者“这些是存在的网络”。如果没有这个,当您尝试将eliko容器连接到proxy网络时,docker-compose将不知道该怎么做。你会得到这个:

ERROR: Service "eliko" uses an undefined network "proxy"

请记住,在标准情况下,docker-compose中的网络以项目名称为前缀。如果您有非外部网络,请执行以下操作:

version: "3"
networks:
  proxy:
services:
  eliko:
    image: irmscher/eliko:v1
    labels:
      - traefik.backend=eliko
      - traefik.frontend.rule=Host:eliko.bloggercraft.com
      - traefik.docker.network=proxy
    networks:
      - proxy

然后compose将实际创建一个名为project_proxy的网络(其中project默认是包含docker-compose.yml的目录的名称)。这只是因为你宣称网络是external,compose知道你想要使用现有的网络。

© www.soinside.com 2019 - 2024. All rights reserved.