Я изучал, как подключить несколько док-контейнеров в одном и том же файле компоновки к базе данных (MySQL / MariaDB) на локальном хосте. В настоящее время база данных предназначена для разработки, но для производства требуется отдельная база данных. Со временем база данных будет развернута в AWS или Azure.
Есть много похожих вопросов по SO, но ни один, похоже, не касается этой конкретной ситуации.
Учитывая существующий docker-compose.yml
version: '3.1'
services:
db:
build:
image: mariadb:10.3
volumes:
- "~/data/lib/mysql:/var/lib/mysql:Z"
api:
image: t-api:latest
depends_on:
- db
web:
image: t-web:latest
scan:
image: t-scan:latest
proxy:
build:
context: .
dockerfile: nginx.Dockerfile
image: t-proxy
depends_on:
- web
ports:
- 80:80
Все эти службы обращаются за прокси за nginx, при этом обоим службам api и scan требуется доступ к базе данных. Существуют и другие службы, требующие доступа к базе данных, которые не показаны для упрощения.
Файл составления продукции будет:
version: '3.1'
api:
image: t-api:latest
depends_on:
- db
web:
image: t-web:latest
scan:
image: t-scan:latest
proxy:
build:
context: .
dockerfile: nginx.Dockerfile
image: t-proxy
depends_on:
- web
ports:
- 80:80
Если бы существовал один контейнер, требующий доступа к базе данных, я мог бы просто открыть порты 3306:3306
, которые не будут работать для нескольких контейнеров.
Разделение контейнеров нарушает работу обратного прокси-сервера и усложняет развертывание и управление. Я пробовал extra_hosts
extra_hosts:
- myhost: xx.xx.xx.xx
но это приводит к ошибкам EAI_AGAIN DNS, что странно, поскольку вы можете пропинговать хост изнутри контейнеров. Я понимаю, что это может быть невозможно