当我的java spring应用程序尝试连接到数据库时,我得到以下内容:
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
spring应用程序中的连接URL如下:
JDBC:MySQL的:// mysqldbserver:3306 / supersede_orchestrator_spring useSSL =假安培; autoReconnect的=真安培; failOverReadOnly =假安培; maxReconnects为= 10
其中mysqldbserver是docker-compose config中的服务名称:
version : '3'
services:
springappserver:
build:
context: .
dockerfile: web.dockerfile
ports:
- "8081:8080"
networks:
- mt-network
volumes:
- .:/vol/development
depends_on:
- mysqldbserver
mysqldbserver:
build:
context: .
dockerfile: db.dockerfile
ports:
- "13306:3306"
networks:
- mt-network
environment:
MYSQL_DATABASE: supersede_orchestrator_spring
MYSQL_USER: supersede_orch
MYSQL_PASSWORD: ****
MYSQL_ROOT_PASSWORD: ****
container_name: orchestrator_mysqldbserver
networks:
mt-network:
driver: bridge
在mysql docker容器中,我已经将bind-address调整为0.0.0.0。 supersede_orch用户的权限设置为%。 当我连接到springappserver docker容器时,我可以通过telnet mysqldbserver 3306到达数据库,我也可以从spring docker容器连接到命令行上的数据库:mysql -h mysqldbserver -u supersede_orch -p。 虽然java spring应用程序无法连接到另一个docker容器上运行的DB。
web.dockerfile如下所示:
FROM java:8-jre
VOLUME /tmp
ADD build/libs/feedback_orchestrator-2.0.0.jar app.jar
RUN apt-get update
RUN apt-get install mysql-client -y
RUN apt-get install libmysql-java -y
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom -Djava.net.preferIPv4Stack=true","-jar","/app.jar"]
所以,我试图确保java使用IP4来解析mysqldbserver(我也使用了相应的mysqldbserver的IP地址,但也失败了。)
最后停靠者图片-a:
42db4e656e6e orchestrator_springappserver "java '-Djava.secu..." 16 minutes ago Up 16 minutes 0.0.0.0:8081->8080/tcp orchestrator_springappserver_1
e2b0b5cc15ac orchestrator_mysqldbserver "docker-entrypoint..." 2 hours ago Up About an hour 0.0.0.0:13306->3306/tcp orchestrator_mysqldbserver
你知道问题是什么吗?谢谢!
答案 0 :(得分:2)
以上配置是正确的。我只是愚蠢到忘记重建罐子。所以,jdbc url没有更新。它现在完美无缺。
答案 1 :(得分:0)
我收到了这个错误。对我来说,我忘了启动WAMP,它有mysql信息。