【问题标题】:Simple Docker container dies immediatelly after docker run command简单的 Docker 容器在 docker run 命令后立即死亡
【发布时间】:2019-09-13 09:59:57
【问题描述】:

我有一个如下所示的 Dockerfile:

FROM alpine:3.9

RUN apk add --update openjdk8
RUN mkdir /var/generator/
COPY generator.jar /var/generator
EXPOSE 8080
ENTRYPOINT [ "/bin/sh" ]

Dockerfile 在 generator/ 文件夹中。我正在使用:

docker build -t generator generator/

构建成功:

Successfully built 878e81f622cc
Successfully tagged generator:latest

但是当我尝试使用此图像运行时

docker run -d -p 8080:8080 generator

它立即死亡。 docker logs 没有输出。

我的 Dockerfile 有什么问题?为什么容器会死掉?

【问题讨论】:

  • 你的 docker 容器执行命令/bin/sh 并退出。您应该运行一个进程以防止它退出
  • 因为你使用了 ENTRYPOINT [ "/bin/sh" ] ,这意味着一个空壳,你不执行 generator.jar

标签: java docker dockerfile devops alpine


【解决方案1】:

尝试运行 JAR。目前,它只是运行sh 命令并退出。如下所示在前台运行 JAR -

FROM alpine:3.9

RUN apk add --update openjdk8
RUN mkdir /var/generator/
COPY generator.jar /var/generator
EXPOSE 8080
ENTRYPOINT ["java","-jar","/var/generator/generator.jar"]

【讨论】:

    【解决方案2】:

    除了你的入口点错误(sh 立即退出)之外,我还建议从适当的基础映像开始,而不是从 alpine 开始并安装 openjdk 包。由于您要运行 java 应用程序,只需使用 JRE 而不是完整的 JDK,并将应用程序作为前台进程启动。

    这是一个最小版本,它在磁盘大小方面也更有效,因为图像会更小。

    FROM openjdk:8-jre-alpine
    
    COPY generator.jar /opt/generator.jar
    EXPOSE 8080
    ENTRYPOINT ["java","-jar","/opt/generator.jar"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 2015-10-07
      • 2018-07-26
      • 1970-01-01
      • 2018-02-23
      相关资源
      最近更新 更多