Я хотел бы построить 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