我想创建多个数据库服务,然后使用 docker-compose 在单个 phpmyadmin 服务中查看数据库。
docker-compose 文件位于下面
version: '3.9'
services:
dbone:
image: mysql:latest
restart: always
container_name: dbone
ports:
- "8080:3306"
environment:
- MYSQL_HOST=mysql
- 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_HOST=mysql
- 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:
- done
- dbtwo
ports:
- "8070:80"
environment:
- MAX_EXECUTION_TIME=0
- PMA_HOST=mysql
- PMA_ARBITRARY=1
volumes:
persistent_1:
persistent_2:
如上所示,dbone 和 dbtwo 是我希望可用于 phpmyadmin 服务的数据库服务。为此,我分别将 mysql 设置为 dbone 和 dbtwo 的 MYSQL_HOST 主机名,并将 mysql 设置为 phpmyadmin 服务的 PMA_HOST 主机名。
我觉得 dbone 和 dbtwo 等服务名称应该分别是两个容器的 MYSQL_HOST 名称。但是如果我分别为 dbone 和 dbtwo 容器设置 MYSQL_HOST=dbone 和 MYSQL_HOST=dbtwo ,我发现很难为 phpmyadmin 容器设置 PMA_HOST 。
我的 docker-compose 文件已使用以下命令运行
docker-compose up --build
我尝试访问 localhost:8070,它会打开 phpmyadmin,但尝试使用用户名:用户和密码:test 登录,失败并显示以下内容:
Cannot log in to the MySQL server
mysqli::real_connect(): php_network_getaddresses: getaddrinfo for mysql failed: Temporary failure in name resolution
mysqli::real_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo for mysql failed: Temporary failure in name resolution
我需要帮助来解决这个问题。
它现在可以通过以下更新来使用
version: '3.9'
services:
dbone:
image: mysql:latest
restart: always
container_name: dbone
ports:
- "3307:3306"
environment:
- MYSQL_HOST=dbone
- 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:
- "3308:3306"
environment:
- MYSQL_HOST=dbtwo
- 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_HOSTS=dbone,dbtwo
- PMA_ARBITRARY=1
volumes:
persistent_1:
persistent_2: