Docker撰写 – Flyway – 无法从DataSource获取Jdbc连接
我试图在Ubuntu中使用Docker Compose部署一个microservice和一个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时,我有这个消息:
flyway-service-i_1 | 错误:无法从用户'用户'的DataSource(jdbc:mysql:// mysqldb:3306 / base)获取Jdbc连接:主机'172.18.0.4'不允许连接到此MySQL服务器
每次我运行命令,我得到一个不同的主机,例如:
错误:无法从数据源(jdbc:mysql:// mysqldb:3306 / base)获取用户'用户' 的Jdbc连接:主机'172.18.0.6'不允许连接到此MySQL服务器
数据库是这样创build的:
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
上授予用户权限,但是您的service1
和flyaway-service-1
服务正在各自独立的容器中运行,因此不在localhost
运行(相对于mysqldb
容器)。 如果这些服务在mysqldb
容器内部运行,那么他们可能会在localhost
上运行。
可能的决议?
您可能想尝试使用您授予访问权限的服务/容器的主机名而不是localhost
?
即: GRANT ALL PRIVILEGES ON base.* To 'user'@'service1';
Docker Networks而不是Container链接
此外,我会build议使用Docker的新networkingfunction,而不是传统的容器链接方法。 查看docker背后的基本原理撰写“链接”命令