Docker和Traefik不同的目录

nx7onnlm  于 2022-11-03  发布在  Docker
关注(0)|答案(1)|浏览(230)

我有2个不同的目录,每个目录都包含用于不同目的的Docker容器,并且都是用Docker组成的。
目录A具有Traefik配置和容器(以及其他容器)以及环境变量,而目录B是一组容器。
我现在想在目录B容器中包含Traefik标签,但在目录B中运行合成时,我会遇到:

WARN[0000] The "DOMAIN_NAME" variable is not set. Defaulting to a blank string.
service "[service name]" refers to undefined network traefik_proxy: invalid compose project

我猜这是因为目录B中的服务无法看到traefik_proxy,因为它是不同堆栈的一部分,与DOMAIN_NAME变量相同。
我如何才能让目录B“到达”目录A?以我当前的配置是否可能?

sgtfey8w

sgtfey8w1#

如果您想让多个compose项目共享一个Traefik前端,这当然是可能的,但是您需要将Traefik放置在一个共享网络上。例如:

version: "3"

services:
  traefik:
    image: docker.io/traefik:latest
    command:
      - --api.insecure=true
      - --providers.docker
      - --accesslog=true
      - --accesslog.filepath=/dev/stderr
      - --providers.docker.exposedByDefault=false
    ports:
      - "80:80"
      - "443:443"
      - "127.0.0.2:8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

networks:
  services:
    external: true

首先创建共享网络:

docker network create services

然后启动Traefik项目:

pushd traefik; docker-compose up -d; popd

现在,对于每个您希望通过Traefik提供的项目,将您的服务放到services网络上。例如,假设我们在app1/docker-compose.yaml中有这样的项目:

version: "3"

services:
  app1:
    image: docker.io/containous/whoami
    networks:
      - services
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app1.rule=PathPrefix(`/app1`)"

networks:
  services:
    external: true

那我就跑:

pushd app1; docker-compose up -d; popd

现在我的app1服务可以在http://localhost/app1/上使用。
我们可以像这样添加任意多的服务;唯一的要求是集装箱被连接到X1 M5 N1 X网络。

相关问题