mysql - Docker 容器未针对 Spring Boot 应用程序运行

标签 mysql hibernate docker spring-boot dockerfile

我是 docker 的新手。我正在尝试使用 docker 运行我的应用程序。但是,当我尝试在容器上运行 exec -it/bin/bash 命令时,它会为我抛出一个错误 错误:

Error response from daemon: Container is not running

Following is my docker file (Dockerfile):
FROM openjdk:8-jdk-alpine
EXPOSE 8080
VOLUME /tmp
ADD /target/entertainment-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

接下来的步骤:

  1. docker build -t 娱乐服务。

  2. docker images,获取镜像id

  3. docker 运行命令:docker run -d imageId

  4. 使用 postman 访问 localhost:8080/entertainment - 无法得到响应,连接错误

  5. docker exec -it container-id/bin/bash

来自守护进程的错误响应:容器未运行

知道 Dockerfile 有什么问题吗?

第一次更新:

更新到 docker 文件

FROM java:alphine
EXPOSE 8198 - same port used in qa32 properties file
VOLUME /tmp
WORKDIR  /srv
ADD /target/entertainment-0.0.1-SNAPSHOT.jar /srv/
CMD java -jar entertainment-0.0.1-SNAPSHOT.jar

我遇到了同样的问题。当我尝试使用手动 java 命令从目标运行 jar 时,它起作用了。不确定这里的问题是什么。

第二次更新:

运行时出现 hibernate 错误

Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
    at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
    at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:254) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
    ... 41 common frames omitted

然后我得到了堆栈

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.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_151]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_151]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_151]

最佳答案

在add命令后面去掉/,像这样

ADD target/entertainment-0.0.1-SNAPSHOT.jar app.jar

路径被视为相对于 docker 文件,因此/可能会导致问题。 docker run 命令也需要更改以映射主机和容器之间的端口。

如果使用虚拟框,还要确保您已创建端口转发规则。

对于第二个问题,请查看此 question

如果您想学习 docker,请查看此 repo .

关于mysql - Docker 容器未针对 Spring Boot 应用程序运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49165616/

相关文章:

php - 如何在数据库中进行系统搜索

java - Hibernate:防止角色表中有多个相同的条目

powershell - 存在代码为 145 的手动运行容器

即使 UFW 拒绝访问,Docker 端口也会在界面上可见

Dockerignore : Ignore everything except a file and the Dockerfile

c# - 在 WPF 中使用另一个组合框所选项目填充组合框

MySQL Query 选择上周的数据?

php - 在 PHP/SQL 中选择数据库

java - Hibernate:在以下情况下插入具有自定义 id 的实体:strategy = GenerationType.AUTO

java - 如何将 Hibernate 5 安装到 Apache Karaf v4 中