多个Docker应用容器连接独立共享MariaDB容器的配置问题
问题排查与修复步骤
1. 前置依赖缺失修复
你配置中声明了external: true的公共网络NET,需要提前手动创建:
docker network create NET
2. MariaDB配置修复
当前环境变量存在冲突:
MYSQL_USER不能设置为root,root是MariaDB默认的超级用户,额外声明会导致初始化冲突MYSQL_PASSWORD是给自定义普通用户的密码,如果你不需要额外创建普通用户可以直接删除该行,root用户密码仅需保留MYSQL_ROOT_PASSWORD即可
修正后的环境变量段:
environment: - TZ=${TIMEZONE} - MYSQL_DATABASE=dockerApps - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
3. Nginx Proxy Manager配置修复
depends_on仅能识别同一个docker-compose文件内定义的服务,跨compose文件的依赖声明不生效,直接删除depends_on:相关两行配置即可,只要两个容器都加入NET网络就可以通过服务名mariadb互通- 你需要手动修改Nginx Proxy Manager的
config.json配置文件,将原有的数据库连接地址改为mariadb,用户名改为root,密码改为你设置的MYSQL_ROOT_PASSWORD,同时需要提前在公共MariaDB中创建Nginx Proxy Manager需要的专属数据库
4. phpMyAdmin配置修复
- 配置文件中
version: "3.9"是HTML转义字符错误,改为正常的version: "3.9" PMA_PASSWORD变量配置错误,root用户对应的密码是${MYSQL_ROOT_PASSWORD},不是${MYSQL_PASSWORD},修正后:
environment: PMA_HOST: mariadb PMA_USER: root PMA_PASSWORD: ${MYSQL_ROOT_PASSWORD}
5. 环境变量补全
你配置中用到的${TIMEZONE}、${MYSQL_ROOT_PASSWORD}等变量,需要在每个compose文件的同级目录创建.env文件,填入对应取值,示例:
TIMEZONE=Asia/Shanghai MYSQL_ROOT_PASSWORD=自定义的数据库root密码
6. 启动顺序调整
必须按顺序启动服务,避免数据库未就绪导致其他应用连接失败:
- 进入MariaDB目录执行
docker-compose -f mariadb.yml up -d,等待10秒左右完成初始化 - 再分别进入Nginx Proxy Manager、phpMyAdmin目录执行对应启动命令
验证方法
启动完成后访问你的服务器IP:8004,用root账号和你设置的密码登录phpMyAdmin,能正常看到数据库列表即说明公共数据库配置生效。
内容的提问来源于stack exchange,提问作者lcp2000
相关产品推荐
相关产品推荐

