关于docker的问题

关于docker的问题

问题描述:

我在docker中运行一个springboot项目,当我运行命令

​nohup  java -jar emos-workflow.jar >> out.log 2>&1 &

启动这个springboot项目,在out.log中报数据库连接的错误,报错中url中的ip是我windows主机的ip这个没有错误,也就是这个项目没有启动成功

https://img1.sycdn.imooc.com//climg/6144b9be09ecfc0a13840668.jpg

mysql数据库是在windows主机上面,docker里面ping windows主机ip是可以ping通的,而且我windows主机的mysql设置了root用户可以远程访问

https://img1.sycdn.imooc.com//climg/6144ba77092bb33302820155.jpg

对应的Centos7的Linux虚拟机我也开放了3306端口,请教下老师怎么解决?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小班 2021-09-18 12:00:29

同学你好,一般出现这个问题主要由于数据库的内置问题引起,

先开mysql,输入show global variables like 'wait_timeout';   就会显示出时间了,

一般情况下Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。这就是问题的所。将会造成上面的异常。

同学可以尝试使用如下命令再来试试。

set global wait_timeout=604800; 
set global interactive_timeout=604800;

如上操作还是不可以的话,同学可以尝试将完整的报错信息贴出,便于老师定位一下问题。

祝学习愉快~

  • 提问者 浅梦sky #1

    老师,我按你的方式设置了两个命令,但是在docker中启动springboot项目还是报错,报错如下:

    请教下老师

    21:35:36  INFO   Init DruidDataSource
    21:37:44  ERROR  init datasource error, url: jdbc:mysql://192.168.2.113:3306/emos?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    com.mysql.cj.jdbc.exceptions.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.
        at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
        at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
        at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
    eBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380)
    
    Caused by: com.mysql.cj.exceptions.CJCommunicationsException: 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.
    
    Caused by: java.net.ConnectException: Connection timed out
        at java.base/sun.nio.ch.Net.connect0(Native Method)
        at java.base/sun.nio.ch.Net.connect(Net.java:574)
        at java.base/sun.nio.ch.Net.connect(Net.java:563)
        at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
        at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333)
        at java.base/java.net.Socket.connect(Socket.java:648)
        at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155)
        at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63)
        ... 96 common frames omitted
    21:37:44  ERROR  {dataSource-1} init error
    com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure


    2021-09-18 21:49:50
  • 好帮手慕小班 回复 提问者 浅梦sky #2

    同学你好,这里根据同学的报错信息:Communications link failure  -->通信异常,通信链接失败。这里是你数据库没有连接成功导致的。同学可以尝试使用如下方式排查一下

    1、确保数据库正常启动

    2、数据库的地址,用户名密码,端口号正确

    3、你在url后面使用&amp;来代替&符号。

    4、同学可以尝试检查一下防火墙是否关闭。

    祝学习愉快~

    2021-09-22 10:30:22
  • 提问者 浅梦sky 回复 好帮手慕小班 #3

    已经解决的,我安装了一个花生壳的内网穿透软件,将windows主机中mysql服务的3306端口映射到外网,然后docker中springboot的yml关于mysql连接部分url修改成对应外网的访问地址就好 

    2021-09-22 10:45:54
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师