несколько docker создавать файлы с traefik (v2.1) и сетями баз данных - PullRequest
0 голосов
/ 25 марта 2020

Я хотел бы построить docker пейзаж. Я использую контейнер с изображением 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

Для структуры я хочу управлять всеми проектами через несколько docker -композитных файлов. Эти контейнеры должны работать в той же сети, что и контейнер traefik, а некоторые - с контейнером mysql. Это также работает для следующего случая (но только иногда)

dev-Releases / 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-release / via docker-compose up -d Я получаю типичную ошибку «Gateway timeout» при вызове их в браузере. Как только я комментирую сеть networks: #- mysql и перезагружаю docker -compose в dev-Releases, он снова работает.

Полагаю, я неправильно настроил внешние сети. Разве нельзя использовать 2 внешние сети? Мне бы хотелось, чтобы какой-нибудь контейнер имел доступ к сети 'mysql', но он не должен быть доступен для всей сети traefik.

Дайте мне знать, если вам нужна дополнительная информация

РЕДАКТИРОВАТЬ (26.03.2020)

Я запускаю.

I положить все мои контейнеры в одну сеть "прокси". Кажется, mysql также должно быть в прокси-сети.

Поэтому я добавляю следующее в database / docker -compose.yml

networks:
  proxy:
    external:
      name: "traefik_proxy"

И удалил базу данных_ mysql сеть из dev-release / docker -compose.yml

1 Ответ

0 голосов
/ 26 марта 2020

, исходя из имен файлов, ваша mysql сеть должна быть mysql_mysql. Вы можете проверить это, выполнив

$> 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

Вы можете проверить этот для получения дополнительной информации

...