老实说我已经厌倦了。我已经尝试了所有可能的解决方案,但它仍然拒绝连接。
这是我的 docker-compose 文件:
version: '3'
services:
# Database
db:
image: mysql:5.7
container_name: db
restart: always
env_file: .env
environment:
- MYSQL_ROOT_HOST=%
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=$MYSQL_DATABASE
- MYSQL_USER=$MYSQL_USER
- MYSQL_PASSWORD=$MYSQL_PASSWORD
networks:
- backend
# Wordpress
wp:
depends_on:
- db
image: wordpress:php7.3-fpm
container_name: wordpress
restart: always
env_file: .env
environment:
- WORDPRESS_DB_HOST=db:3306
- WORDPRESS_DB_USER=$MYSQL_USER
- WORDPRESS_DB_PASSWORD=$MYSQL_PASSWORD
- WORDPRESS_DB_NAME=$MYSQL_DATABASE
volumes:
- ./wordpress:/var/www/html
networks:
- backend
# Nginx
nginx:
depends_on:
- wp
image: nginx
restart: always
ports:
- "80:80"
volumes:
- ./wordpress:/var/www/html
- ./nginx-conf:/etc/nginx/conf.d
networks:
- backend
networks:
backend:
driver: bridge
我尝试过 127.0.0.1、0.0.0.0、db、docker inform db 来获取容器的 IP 地址。全部都无法连接。我使用过 Sequel Pro、MySQL Workbench 和 DataGrip。
设置工作完全正常。只是我无法连接到容器外部的数据库。
我什至检查了容器中的mysql主机权限并得到:
% root
% wordpress (name of the user I created)
...
我错过了什么吗?
最佳答案
为了使用 SQL 客户端从主机访问数据库,您需要将 MYSQL 数据库端口映射到主机。
在您的 Compose 文件中将端口映射添加到您的数据库服务。
db:
...
ports:
- "3306:3306"
我相信您正在使用基于 WordPress 服务的默认端口。
然后将 SQL 客户端配置为 127.0.0.1 和端口 3306。
关于mysql - 无法连接到docker容器中的MySQL数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58889953/