gpt4 book ai didi

java - Docker Compose - Flyway - 无法从数据源获取 Jdbc 连接

转载 作者:行者123 更新时间:2023-12-02 18:07:45 24 4
gpt4 key购买 nike

我打算在 Ubuntu 中使用 Docker Compose 部署微服务和 flyway 服务。 docker-compose.yml 看起来像这样:

version: '2'

services:

mysqldb:
image: mysql:5.6.26
environment:
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: base
ports:
- "3306:3306"

flyway-service-i:
image: mialk/flyway-service
volumes:
- "../resources/db/migration:/migrations/ro"
depends_on:
- mysqldb
links:
- mysqldb
command: migrate -url=jdbc:mysql://mysqldb:3306/base -user=user -password=password -baselineOnMigrate=true - locations='filesystem:/migrations'

service1:
image: my/service
ports:
- "8080:8080"
links:
- mysqldb
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://mysqldb:3306/base
- SPRING_DATASOURCE_USERNAME=user
- SPRING_DATASOURCE_PASSWORD=password

但是当我运行命令:sudo docker-compose up 时,我收到以下消息:

飞路服务-i_1 |错误:无法从数据源 (jdbc:mysql://mysqldb:3306/base) 为用户 'user' 获取 Jdbc 连接:不允许主机 '172.18.0.4' 连接到此 MySQL 服务器

每次我运行命令时,我都会得到一个不同的主机,例如:

错误:无法从用户“user”的数据源 (jdbc:mysql://mysqldb:3306/base) 获取 Jdbc 连接:不允许主机 “172.18.0.6”连接到这个 MySQL 服务器

数据库是这样创建的:

CREATE DATABASE base CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON base.* To 'user'@'localhost';

ifconfig 命令显示 Docker 的 IP 为 172.17.0.1。

我不知道为什么flyway无法连接到数据库,为什么主机每次调用都变了,你能帮帮我吗?

谢谢! :)

最佳答案

问题

在这一行
GRANT ALL PRIVILEGES ON base.* To 'user'@'localhost';
您向 localhost 上的用户授予权限,但您的 service1flyaway-service-1 服务正在各自独立的容器中运行,因此未运行在 localhost 上(相对于 mysqldb 容器)。如果这些服务在mysqldb 容器内部 运行,那么它们可能会在localhost 上运行。

可能的解决方案?

您可能想尝试使用您授予访问权限的服务/容器的主机名而不是 localhost

即:GRANT ALL PRIVILEGES ON base.* To 'user'@'service1';

Docker 网络而不是容器链接

此外,我建议使用 Docker 的新网络功能,而不是传统的容器链接方法。参见 rationale behind docker compose "links" order

关于java - Docker Compose - Flyway - 无法从数据源获取 Jdbc 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40268174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com