如何用Docker-Compose配置多MySQL服务并通过单PhpMyAdmin访问
多MySQL服务+单PhpMyAdmin配置问题解决方案
核心问题分析
报错getaddrinfo for mysql failed是因为PhpMyAdmin配置的PMA_HOST=mysql,但你的Docker Compose中不存在名为mysql的服务,导致容器无法解析这个主机名。另外配置中还有两处小错误需要修正。
1. 修正配置错误
- 依赖项错误:
phpmyadmin服务的depends_on中写了错误的服务名done,应改为dbone。 - 冗余环境变量:两个MySQL服务中的
MYSQL_HOST=mysql属于无效配置,这个变量是给MySQL客户端容器用的,服务器容器不需要,直接删除。
2. 利用PMA_ARBITRARY实现多数据库连接
你已经配置了PMA_ARBITRARY=1,这个参数允许PhpMyAdmin连接任意MySQL服务器,无需指定固定PMA_HOST(可直接删除原配置中的PMA_HOST=mysql)。登录时按以下操作:
- 打开
localhost:8070进入登录页 - 在服务器输入框中,输入对应MySQL服务名:
- 连接第一个数据库:输入
dbone - 连接第二个数据库:输入
dbtwo
- 连接第一个数据库:输入
- 输入用户名(
user)和密码(test),或使用root账号(root/test)登录
3. 修正后的完整配置文件
version: '3.9' services: dbone: image: mysql:latest restart: always container_name: dbone ports: - "8080:3306" environment: - MYSQL_DATABASE=sakila - MYSQL_USER=user - MYSQL_PASSWORD=test - MYSQL_ROOT_PASSWORD=test - TZ=Africa/Lagos volumes: - ./docker/data/db/mysql/dump/2-create-schema.sql:/docker-entrypoint-initdb.d/2.sql - persistent_1:/var/lib/mysql command: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_general_ci", "--skip-character-set-client-handshake", "--default-authentication-plugin=caching_sha2_password"] dbtwo: image: mysql:latest restart: always container_name: dbtwo ports: - "8090:3306" environment: - MYSQL_DATABASE=mysql_json_db - MYSQL_USER=user - MYSQL_PASSWORD=test - MYSQL_ROOT_PASSWORD=test - TZ=Africa/Lagos volumes: - ./docker/data/db/mysql/dump/mysql_json_db.sql:/docker-entrypoint-initdb.d/1.sql - persistent_2:/var/lib/mysql command: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_general_ci", "--skip-character-set-client-handshake", "--default-authentication-plugin=caching_sha2_password"] phpmyadmin: image: phpmyadmin:latest restart: always container_name: phpmyadmin depends_on: - dbone - dbtwo ports: - "8070:80" environment: - MAX_EXECUTION_TIME=0 - PMA_ARBITRARY=1 volumes: persistent_1: persistent_2:
4. 重启服务生效
执行命令重启服务:
docker-compose down docker-compose up --build -d
内容的提问来源于stack exchange,提问作者amachree tamunoemi
相关产品推荐
相关产品推荐

