Я запускаю несколько сайтов WordPress, используя docker-compose (и nginx-proxy). Поэтому я могу использовать один и тот же файл docker-compose для каждого сайта, который использую .env. Я хочу, чтобы каждый из контейнеров MariaDB использовал разные порты (поскольку они используют одну и ту же внешнюю сеть докеров).
У меня есть файл компоновки ниже, но когда я его открываю, я получаю.
MySQL Connection Error: (2002) Connection refused
Раньше я использовал тот же файл compose без раздела ports: и с портом, жестко закодированным в разделе WordPress, и он работал.
Где я неправ?
docker-compose.yml
version: '3'
services:
db:
image: mariadb
container_name: ${DB_CONTAINER}
hostname: ${DB_CONTAINER}
ports:
- ${DB_PORT}:3306
volumes:
- ./db:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: ${DB_WP_PASSWORD}
wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
container_name: ${WP_CONTAINER}
hostname: ${WP_CONTAINER}
volumes:
- ./html:/var/www/html
expose:
- 80
restart: always
environment:
VIRTUAL_HOST: ${DOMAINS}
LETSENCRYPT_HOST: ${DOMAINS}
LETSENCRYPT_EMAIL: ${EMAIL}
WORDPRESS_DB_HOST: db:${DB_PORT}
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: ${DB_WP_PASSWORD}
networks:
default:
external:
name: nginx-proxy
.env
DB_CONTAINER=test_click_db
WP_CONTAINER=test_click_wp
DB_PORT=13306
EMAIL=bene@domain.com
DOMAINS=test.click.tvpp.tv
DB_ROOT_PASSWORD=aabbcc
DB_WP_PASSWORD=xxyyzz
Эта линия
WORDPRESS_DB_HOST: db:${DB_PORT}
следует изменить на
WORDPRESS_DB_HOST: db:3306
(Я предполагаю, что это на самом деле то, что вы делали ранее) Контейнер wordpress затем подключится напрямую к контейнеру mariadb через порт 3306 контейнера. В db
часть разрешается внутренним DNS-сервером сети докеров на IP-адрес вашего контейнера mariadb.
Вам не нужна эта часть
ports:
- ${DB_PORT}:3306
Это означает, что докер отобразит ${DB_PORT}
на ваша хост-машина на порт 3306 в службе (контейнере), поэтому вы также можете получить доступ к БД, подключившись к хост-машине через порт ${DB_PORT}
. Обычно это только тогда, когда вы собираетесь подключиться к контейнеру извне хост-машины.
На самом деле я решил, что службе db нужно добавить в среду следующее:
MYSQL_TCP_PORT: ${DB_PORT}
MYSQL_UNIX_PORT: ${DB_PORT}