You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多套Docker Compose共享MariaDB服务:自动连接与启停方案求助

问题解决方案:共享MariaDB实例给多个WordPress Docker Compose

问题根源

每个WordPress Compose配置中都通过extends引入了mariadb服务,而该服务指定了固定的container_name: mariadb,当启动第二套WordPress时,Docker会尝试创建同名容器,导致冲突报错。

解决方法

方法一:单独管理MariaDB容器(推荐)

  1. 先启动独立的MariaDB容器
    执行MariaDB目录下的Compose文件,单独启动数据库服务:
    docker-compose -f ../mariadb/docker-compose.yml up -d
    
  2. 修改WordPress的Compose配置
    删除WordPress Compose中的mariadb服务块,确保只保留wordpress服务,配置示例:
    version: '3.8'
    
    services:
      wordpress:
        image: wordpress:latest
        container_name: wordpress3
        restart: always
        environment:
          WORDPRESS_DB_HOST: mariadb
          WORDPRESS_DB_USER: root
          WORDPRESS_DB_PASSWORD: admin
          WORDPRESS_DB_NAME: wordpress3
        ports:
          - "8083:80"
        depends_on:
          - mariadb # 仅表示依赖顺序,不保证DB已就绪
        networks:
          - wordpress_network
    
    networks:
      wordpress_network:
        name: wordpress_network
        external: true
    
    (另一套WordPress配置同理,仅修改container_name、ports和WORDPRESS_DB_NAME即可)
  3. 启动WordPress
    直接执行各自的Compose启动命令:
    docker-compose up -d
    
    此时WordPress会直接连接到已运行的mariadb容器(因为在同一个外部网络wordpress_network中,容器名可直接解析)。

方法二:用脚本实现自动判断启动

如果希望每次启动WordPress时自动检查MariaDB状态,可编写启动脚本:

#!/bin/bash

# 检查mariadb容器是否处于运行状态
if ! docker ps --filter "name=mariadb" --filter "status=running" | grep -q mariadb; then
    echo "启动MariaDB服务..."
    docker-compose -f ../mariadb/docker-compose.yml up -d
fi

echo "启动WordPress服务..."
docker-compose up -d

将脚本保存为start-wordpress.sh,赋予执行权限后运行:

chmod +x start-wordpress.sh
./start-wordpress.sh

每次启动WordPress前,脚本会自动检查MariaDB是否运行,未运行则启动,否则直接启动WordPress。

方法三:使用Docker Compose Profiles

通过Profiles控制MariaDB服务的启动时机:

  1. 修改MariaDB的Compose配置
    添加profiles字段,指定仅在db profile下启动:
    version: '3.8'
    
    services:
      mariadb:
        image: mariadb:latest
        container_name: mariadb
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: admin
          MYSQL_DATABASE: "wordpress3,wordpress4"
          MYSQL_USER: mohsin
          MYSQL_PASSWORD: 12345678
        volumes:
          - mariadb_data:/var/lib/mysql
        networks:
          - wordpress_network
        profiles: ["db"] # 添加profile
    
    networks:
      wordpress_network:
        external: true
        name: wordpress_network
    
    volumes:
      mariadb_data:
    
  2. 修改WordPress的Compose配置
    删除mariadb服务块,和方法一的WordPress配置一致。
  3. 启动服务
    • 第一次启动时,添加--profile db参数,同时启动MariaDB和WordPress:
      docker-compose --profile db up -d
      
    • 后续启动其他WordPress时,直接执行常规启动命令即可:
      docker-compose up -d
      

额外提示

  • depends_on仅控制容器启动顺序,不保证MariaDB服务已完全就绪。如需确保DB可用,可在WordPress服务中添加健康检查或使用wait-for-it工具。
  • 确认MariaDB的MYSQL_DATABASE配置正确,逗号分隔的wordpress3,wordpress4会自动创建这两个数据库,与WordPress的WORDPRESS_DB_NAME对应。

内容的提问来源于stack exchange,提问作者Mohsin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 23:35:58