Docker容器未针对spring boot应用程序运行

时间:2018-03-08 04:48:44

标签: mysql hibernate docker spring-boot dockerfile

我是码头工人的新手。我正在尝试使用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 entertainment-service。

  2. 泊坞窗图片,获得图片ID

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

  4. 使用邮递员点击localhost:8080 /娱乐 - 无法得到回复,连接错误

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

  6. 来自守护程序的错误响应:Container未运行

    任何想法Dockerfile都有问题吗?

    第一次更新:

    更新到泊坞窗文件

    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]
    

2 个答案:

答案 0 :(得分:0)

删除/添加命令之后,像这样

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

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

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

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

如果您尝试使用此repo来学习泊坞广告。

答案 1 :(得分:0)

看起来该应用无法从docker容器联系到db。如果您使用的是像mysql这样的外部数据库,则需要在容器和外部mysql之间建立链接。

一种方法是将mysql容器和app容器放在同一个网络中。

  1. 创建网络 - docker network create sample-network
  2. 创建mysql容器 - docker create --network sample-network --name mysql-container -e MYSQL_ROOT_PASSWORD=root mysql --max-connections=300 --max-connect-errors=10000
  3. 创建应用容器 - docker create --network sample-network --name your_app_name app_image_name_here
  4. 使用 - docker start mysql-container your_app_name
  5. 启动mysql和您的应用