在 docker-compose 中更改 mariadb 的端口

在 docker-compose 中更改 mariadb 的端口

我使用 docker-compose(和 nginx-proxy)运行多个 WordPress 网站。因此,我可以对我使用的每个网站使用相同的 docker-compose 文件 .env。我希望每个 MariaDB 容器使用不同的端口(因为它们共享相同的外部 docker 网络)。

我有下面的撰写文件,但是当我打开它时,我得到了。

MySQL Connection Error: (2002) Connection refused

以前,我使用相同的撰写文件,但没有使用 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 protected]
DOMAINS=test.click.tvpp.tv
DB_ROOT_PASSWORD=aabbcc
DB_WP_PASSWORD=xxyyzz

答案1

实际上,我发现数据库服务需要在环境中添加以下内容:

MYSQL_TCP_PORT: ${DB_PORT}
MYSQL_UNIX_PORT: ${DB_PORT}

答案2

这行

WORDPRESS_DB_HOST: db:${DB_PORT}

应改为

WORDPRESS_DB_HOST: db:3306

(我猜这实际上是你之前做的)然后 wordpress 容器将直接连接到端口 3306 上的 mariadb 容器容器的。该db部分由docker网络的内部DNS服务器解析为你的mariadb容器的IP地址。

你不需要这个部分

ports:
  - ${DB_PORT}:3306

这意味着docker将${DB_PORT}映射您的主机到服务(容器)中的端口 3306,因此您也可以通过连接到端口 的主机来访问数据库${DB_PORT}。这通常仅适用于您打算从主机外部连接到容器的情况。

相关内容