我是 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"]
接下来的步骤:
docker build -t 娱乐服务。
docker images,获取镜像id
docker 运行命令:docker run -d imageId
使用 postman 访问 localhost:8080/entertainment - 无法得到响应,连接错误
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/