Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个docker使用traefik(v2.1)和数据库网络组合文件_Docker_Docker Compose_Traefik_Docker Networking - Fatal编程技术网

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

多个docker使用traefik(v2.1)和数据库网络组合文件,docker,docker-compose,traefik,docker-networking,Docker,Docker Compose,Traefik,Docker Networking,我想建立一个码头景观。我使用一个带有traefik(v2.1)映像的容器和一个用于多个数据库的mysql容器 traefik/docker compose.yml version: "3.3" services: traefik: image: "traefik:v2.1" container_name: "traefik" restart: always command: - &quo

我想建立一个码头景观。我使用一个带有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:
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
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"
networks:
  proxy:
    external:
      name: "traefik_proxy"
数据库/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:
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
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"
networks:
  proxy:
    external:
      name: "traefik_proxy"
对于该结构,我希望通过多个docker compose文件控制所有项目。这些容器应与traefik容器在同一网络上运行,有些容器与mysql容器在同一网络上运行。 这也适用于以下情况(但只是有时)

开发人员发布/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:
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
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"
networks:
  proxy:
    external:
      name: "traefik_proxy"
当我在dev releases/via
docker compose up-d
中重新启动容器时,在浏览器中调用它们时会出现典型的错误“网关超时”。 只要我评论网络
networks:#-mysql
并在dev发行版中重新启动docker compose,它就会再次工作

我猜我没有正确配置外部网络。不能使用2个外部网络吗? 我希望一些容器可以访问“mysql”网络,但它不应该可以访问整个traefik网络

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

编辑(26.03.2020) 我让它运行

我将所有容器放在一个网络“代理”中。看来mysql也必须在代理网络中

因此,我将以下内容添加到数据库/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:
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
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"
networks:
  proxy:
    external:
      name: "traefik_proxy"

并从dev releases/docker compose.yml中删除数据库\u mysql network

根据文件名,您的
mysql
网络应该是
mysql\u mysql
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:
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
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"
networks:
  proxy:
    external:
      name: "traefik_proxy"
您可以通过执行

$> docker network ls
您还缺少一些服务标签,例如

traefik命令行

- '--providers.docker.watch=true'
- '--providers.docker.swarmMode=true'
标签

- traefik.docker.network=proxy
- traefik.http.services.dev-releases-backend.loadbalancer.server.port=yourport
- traefik.http.routers.dev-releases-backend.service=mailcatcher

您可以查看更多信息

mysql网络是database\u mysql。我将目录mysql/更改为database/1。我真的需要swarm模式和负载均衡器吗?我的docker场景2从不需要使用swarm模式。为什么是docker.手表?3.你是说dev releases/docker compose.yml上的“-traefik.docker.network=proxy”吗?我自己在没有swarm的情况下修复了它。请参阅我的编辑。谢谢你的时间