搜索堆栈溢出后,感觉这是一个常见的问题,但我没有找到决定。
在没有docker的情况下,程序在本地主机上工作。码头文件:
FROM openjdk:8
ADD target/DockerMyBlog.jar DockerMyBlog.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "DockerMyBlog.jar"]application.properties (确实试图在这里替换“dockermyblog”的"localhost“):
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/javastudy
jdbc.username=hey
jdbc.password=hey在终端中通过命令创建容器:
docker build -t dockermyblog .试图通过以下方式启动:
docker run -p 8080:8080 dockermyblog接收错误:
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:829)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:449)
......................
试图设置(不了解这是什么):
jdbc:mysql://localhost:3306/javastudy?enabledTLSProtocols=TLSv1.2或
jdbc.url=jdbc:mysql://dockermyblog:3306/javastudy?autoReconnect=true&useSSL=false试图安装终端:
docker inspect dockermyblog | grep IPAddress终端不知道"grep“
我该怎么做才能在本地启动?
发布于 2022-05-18 09:11:17
在这样的Java应用程序中使用localhost时,它解析为容器上的地址,主机上没有地址(所以是您的计算机)。因为在同一个容器中没有运行MySQL服务器,所以它将失败。
如果将url更改为jdbc.url=jdbc:mysql://host.docker.internal:3306/javastudy,则容器MySQL应用程序可以访问在主机上运行的MySQL。有关详细解释,请参阅this帖子。
但是,为了使它在本地运行,所以在Intellij和容器中,您可以使用不同的spring启动配置文件。假设application-local.proeprties只包含jdbc.url=jdbc:mysql://localhost:3306/javastudy,如果您使用该配置文件,它将覆盖url
https://stackoverflow.com/questions/72285476
复制相似问题