【问题标题】:Why do I have to state networks twice in docker-compose.yml?为什么我必须在 docker-compose.yml 中两次声明网络?
【发布时间】:2019-05-01 13:56:54
【问题描述】:

我有点困惑。在 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】:

    顶级 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_proxy 的网络(其中 project 默认是包含您的 docker-compose.yml 的目录的名称)。仅因为您已将网络声明为 external,compose 才知道您要使用现有网络。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多