Docker Springboot没有运行

时间:2018-03-26 10:55:43

标签: java docker spring-boot dockerfile

我是码头工的新手, 我已经预先制作了一个docker镜像(更新并安装了Java和其他依赖项)并将其存储在我的GitHub仓库中, 我在AWS S3存储桶上存储了一个简单的hello world Spring Boot应用程序,

我想要我的DockerFile -
1.从我的GitHub回购中获取docker图像 2.做一个更新补丁
3.将我的工作目录设置为/ home / ubuntu
4.使用wget从S3存储桶下载应用程序(可公开访问)
5.在容器内运行应用程序

之后我将运行图像。

构建命令 -

docker build -t someTag .

要运行的命令 -

docker run -p 9090:8090 someTag

我将下载的java应用程序jar是 - docker.jar
应用程序在端口8080上运行

我有以下Dockerfile -

FROM someRepoHere

WORKDIR /home/ubuntu

RUN apt-get update

RUN cd /home/ubuntu

VOLUME /home/ubuntu

RUN wget S3BucketLocationHere

#RUN nohup java -jar docker.jar &

# Expose the default port
EXPOSE 8080

#Old command - CMD nohup java -jar docker.jar &
CMD ["java", "-jar", "docker.jar"]

DockerFile能够成功构建图像但是,
我的应用程序无法访问,它没有在容器内运行 在本地,如果我找到我的应用程序并运行nohup命令,则应用程序会成功响应。

1 个答案:

答案 0 :(得分:2)

正在运行的命令控制容器的存在,当它退出/返回时,容器退出和停止。因此,您需要在前台运行命令。当您在容器中的交互式shell中时,该命令是您的shell。您列出的命令使用了一个shell,但是当它用完要处理的命令并且没有任何东西在前台运行时,该shell退出:

CMD nohup java -jar docker.jar &

字符串语法将使用/bin/sh -c "nohup java ..."运行命令。

更好的选择是使用json语法运行,如果你不需要shell,并在前台运行你的java应用程序,避免nohup和后台语法:

CMD ["java", "-jar", "docker.jar"]

关于提供的Dockerfile的更多评论:

WORKDIR /home/ubuntu

RUN apt-get update

这只会在您的容器内创建一个缓存,如果您将来尝试使用它,它将变得陈旧并导致缓存未命中。如果这是您的意图,这不会升级任何包。该行应删除。

RUN cd /home/ubuntu

这不会对文件系统进行任何更改,也不会对生成的图像产生任何影响。退出RUN行后,当前shell状态将丢失,包括当前目录和您设置的任何变量。该行应删除。

VOLUME /home/ubuntu

从这一行开始,对/ home / ubuntu的更改将会丢失。除非您在运行时在同一位置指定卷,否则您将只看到作为结果创建的匿名卷。你可能不想要上面的音量线,因为它会破坏下一行的内容。

RUN wget S3BucketLocationHere

这一行已被混淆但我怀疑你输出的是/ home / ubuntu,因为WORKDIR的值。由于上面的VOLUME行,此处创建的任何内容都将丢失。