多个docker使用traefik(v2.1)和数据库网络组成文件

bsxbgnwa  于 2022-10-04  发布在  Docker
关注(0)|答案(0)|浏览(96)

我想建造一个码头景观。我使用带有traefik(V2)的容器。1)镜像和多个数据库的MySQL容器。

traefik/docker-compose.yml

version: "3.3"

services:
  traefik:
    image: "traefik:v2.1"
    container_name: "traefik"
    restart: always
    command:
      - "--log.level=DEBUG"
      - "--api=true"
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.docker.network=proxy"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.traefik-dashboard.address=:8080"
      - "--certificatesresolvers.devnik-resolver.acme.httpchallenge=true"
      - "--certificatesresolvers.devnik-resolver.acme.httpchallenge.entrypoint=web"
      #- "--certificatesresolvers.devnik-resolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.devnik-resolver.acme.email=####"
      - "--certificatesresolvers.devnik-resolver.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "./data:/etc/traefik"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    networks:
      - "proxy"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`devnik.dev`)"
      - "traefik.http.routers.traefik.entrypoints=traefik-dashboard"
      - "traefik.http.routers.traefik.tls.certresolver=devnik-resolver"
      #basic auth
      - "traefik.http.routers.traefik.service=api@internal"
      - "traefik.http.routers.traefik.middlewares=auth"
      - "traefik.http.middlewares.auth.basicauth.usersfile=/etc/traefik/.htpasswd"

# Docker Networks

networks:
  proxy:

数据库/docker-compose.yml

version: "3.3"

services:
  #MySQL Service
  mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    ports:
      - "3306:3306"
    volumes:
      #persist data
      - ./mysqldata/:/var/lib/mysql/
      - ./init:/docker-entrypoint-initdb.d
    networks:
      - "mysql"
    environment:
      MYSQL_ROOT_PASSWORD: ####
      TZ: Europe/Berlin

# Docker Networks

networks:
  mysql:
    driver: bridge

对于结构,我想通过多个对接合成文件控制所有项目。这些容器应该与traefik容器和MySQL容器运行在相同的网络上。这也适用于以下情况(但仅在某些情况下)

dev-释放/docker-compose.yml

version: "3.3"

services:
  backend:
    image: "registry.gitlab.com/devnik/dev-releases-backend/master:latest"
    container_name: "dev-releases-backend"
    restart: always
    volumes:
      #laravel logs
      - "./logs/backend:/app/storage/logs"
      #cron logs
      - "./logs/backend/cron.log:/var/log/cron.log"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.dev-releases-backend.rule=Host(`dev-releases.backend.devnik.dev`)"
      - "traefik.http.routers.dev-releases-backend.entrypoints=websecure"
      - "traefik.http.routers.dev-releases-backend.tls.certresolver=devnik-resolver"
    networks:
      - proxy
      - mysql
    environment:
      TZ: Europe/Berlin

# Docker Networks

networks:
  proxy:
    external:
      name: "traefik_proxy"
  mysql:
    external:
      name: "database_mysql"

在浏览器中调用容器时,只要重新启动dev-ease/via docker-compose up -d中的容器,我就会收到典型的错误“Gateway Timeout”。只要我注解网络networks: #- mysql并重新启动docker-compose in dev-ease/它就会再次工作。

我的猜测是我没有正确配置外部网络。不能使用2个外部网络吗?我希望一些容器可以访问‘MySQL’网络,但它不应该对整个traefik网络都可访问。

如果您需要更多信息,请告诉我

编辑(26.03.2020)

我让它跑起来。

我将我所有的容器放在一个网络“代理”中。似乎MySQL也必须在代理网络中。

因此,我在数据库/docker-compose.yml中添加了以下内容

networks:
  proxy:
    external:
      name: "traefik_proxy"

并将数据库_MySQL网络从dev-ease/docker-compose.yml中删除

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题