首页 > 解决方案 > 为什么我必须在 docker-compose.yml 中两次声明网络?

问题描述

我有点困惑。在 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,它是相同的还是?

这里有点糊涂...

标签: dockernetworkingdocker-compose

解决方案


顶级networks节告诉 docker-compose “这些是存在的网络”。没有它,当您尝试将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_proxyproject默认情况下,其中包含您的目录的名称docker-compose.yml)。只是因为您已将网络声明为externalcompose 才知道您要使用现有网络。


推荐阅读