Назад | Перейти на главную страницу

Изменение порта mariadb в docker-compose

Я запускаю несколько сайтов 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}