老实说,我对此感到厌倦。我已经尝试了所有可能的解决方案,但它仍然拒绝连接。
这是我的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 inspect db以获取容器的IP地址。它们都无法连接。我用过Sequel Pro,MySQL Workbench和DataGrip。
设置工作完全正常。只是我无法连接到容器外部的数据库。
我什至检查了容器中的mysql主机特权并得到:
% root
% wordpress (name of the user I created)
...
我想念什么吗?
答案 0 :(得分:0)
为了使用sql客户端从主机访问数据库,您需要将MYSQL数据库端口映射到主机。
在您的Compose文件中,将端口映射添加到您的db服务中。
db:
...
ports:
- "3306:3306"
我相信您正在使用基于Wordpress服务的默认端口。
然后将您的SQL客户端配置为127.0.0.1和端口3306。
答案 1 :(得分:0)
MYSQL更改
MY.ini在c:\ programdata \ mysql \ mysql服务器8.0中的更改
添加Bind_address=0.0.0.0
另存为管理员-检查时间戳
创建一个App用户-不要为该应用创建mysql Root用户
drop user 'username'@localhost;
FLUSH PRIVILEGES;
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# Added by Docker Desktop
10.0.0.6 host.docker.internal
10.0.0.6 gateway.docker.internal
应用程序更改:
app.properties中JDBC URL中的用户host.docker.internal
spring.datasource.url=jdbc:mysql://host.docker.internal:3306/test
spring.datasource.username=username
spring.datasource.password=password
maven install
应该可以工作
docker run <repo/repo>:image
应该可以正常工作。现在