![](/img/trans.png)
[英]Cannot connect docker Spring-Boot app with mysql container and flyway in docker-compose
[英]Cannot connect MySQL with Spring Boot in docker-compose
我在使用 Docker 和 mysql 运行 spring 引导时遇到问题。 在没有 Docker 的情况下,它在本地运行良好。 我的 dockerfile
FROM maven:3.3-jdk-8-alpine
ENV MAVEN_HOME /usr/lib/mvn
ENV PATH $MAVEN_HOME/bin:$PATH
ENV SPRING_DATASOURCE_URL jdbc:mysql://my-db:3306/registration_springboot?createDatabaseIfNotExist=true
ENV SPRING_DATASOURCE_USERNAME vnphu
ENV SPRING_DATASOURCE_PASSWORD password
docker-compose.yml 文件
version: '3'
services:
my-db:
image: mysql/mysql-server:5.7
container_name: my-db
environment:
MYSQL_USER: vnphu
MYSQL_DATABASE: registration_springboot
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
ports:
- '3306-3306'
web:
build: .
working_dir: /app
volumes:
- .:/app
- ~/.m2:/root/.m2
ports:
- "8080:8080"
command: mvn clean spring-boot:run
depends_on:
- my-db
运行时报错:docker-compose up --build
Caused by: java.net.ConnectException: Connection refused (Connection refused)
web_1 | at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_121]
web_1 | at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_121]
web_1 | at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_121]
web_1 | at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_121]
web_1 | at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_121]
web_1 | at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_121]
web_1 | at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155) ~[mysql-connector-java-8.0.19.jar:8.0.19]
web_1 | at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65) ~[mysql-connector-java-8.0.19.jar:8.0.19]
web_1 | ... 115 common frames omitted
web
应用程序正在尝试连接到尚不可用的my-db
(数据库仍在加载中),您可以根据自己的喜好使用以下任何解决方案。
重启失败
修改 docker-compose 文件为
web: ports: "8080:8080" restart:on-failure
睡觉
修改环境下的docker-compose文件
web: ports: "8080:8080" environment: -SLEEP_LENGTH=5
等待它.sh 文件
这种方法需要你修改你的 Dockerfile 以及 docker-compose 文件
问题在于我在 Dockerfile 中的 ENV,因为我在 Shell 中也有一个同名的环境变量,它将优先。
ENV SPRING_DATASOURCE_URL jdbc:mysql://my-db:3306/registration_springboot?createDatabaseIfNotExist=true
在 docker-compose.yml 中将变量添加到环境后,它起作用了
web:
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://my-db:3306/registration_springboot?createDatabaseIfNotExist=true
docker-compose.yml 将按以下顺序查找:
更多细节可以参考这篇文章: https://vsupalov.com/override-docker-compose-dot-env/
您的服务和数据库不在同一个网络上。 考虑定义一个网络并添加到每个服务和数据库
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.