![](/img/trans.png)
[英]unable to connect spring to mysql database in docker container
[英]Unable to connect to MySQL database in docker container
我真的厌倦了这个。 我已经尝试了所有可能的解决方案,但它仍然拒绝连接。
这是我的 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 检查 db 以获取容器的 ip 地址。 他们都无法连接。 我使用过 Sequel Pro、MySQL Workbench 和 DataGrip。
该设置完全正常。 只是我无法连接到容器外的数据库。
我什至检查了容器中的 mysql 主机权限并得到:
% root
% wordpress (name of the user I created)
...
我错过了什么吗?
为了使用 sql 客户端从主机访问您的数据库,您需要 map 将 MYSQL 数据库端口连接到主机。
在您的 Compose 文件中,将端口映射添加到您的数据库服务。
db:
...
ports:
- "3306:3306"
我相信您使用的是基于 Wordpress 服务的默认端口。
然后将您的 SQL 客户端配置为 127.0.0.1 和端口 3306。
您需要考虑几件事。 首先,检查并确保它们在同一个网络上。 您可以通过使用以下命令检查他们的 IP 来做到这一点。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <continer>
如果不是,那么您可以运行以下命令...
docker network connect bridge <container>
登录到您的应用程序容器,看看您是否可以访问 MySQL。 如果没有,那么您可能需要确保您的 MySQL 权限设置正确。 为此,您可以运行以下命令。
GRANT ALL PRIVILEGES ON <your db>.* TO <your user>@<IP of APP> IDENTIFIED BY 'your password';
您甚至可以通过 @% 授予所有 IP 地址的权限以进行测试。
接着...
FLUSH PRIVILEGES;
真的应该这么简单。
MYSQL 更改
c:\programdata\mysql\mysql server 8.0 中MY.ini 更改添加Bind_address=0.0.0.0
另存为管理员 - 检查时间戳
创建一个应用程序用户 - 不要用户 mysql 应用程序的根用户
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
应用程序更改:
用户host.docker.internal in JDBC URL in app.properties
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
应该可以正常工作。 现在
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.