【问题标题】:Docker Springboot not runningDocker Springboot 未运行
【发布时间】:2018-09-04 11:59:02
【问题描述】:

我是 docker 新手, 我已经预先制作了一个 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 能够成功构建镜像,但是,
我的应用程序无法访问,它没有在容器内运行。
在本地,如果我 wget 我的应用程序并运行 nohup 命令,应用程序会成功响应。

【问题讨论】:

    标签: java docker spring-boot dockerfile


    【解决方案1】:

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

    CMD nohup java -jar docker.jar &
    

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

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

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

    提供的 Dockerfile 上的更多 cmets:

    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 行,此处创建的所有内容都将丢失。

    【讨论】:

    • 我实际上需要 nohup 命令,以便应用程序将所有日志附加到 nohup.out 文件
    • 读取该日志文件的内容是什么?它被写入容器内,因此您增加了磁盘使用量,并删除了使用docker logs 的能力。如果您确实需要具有此名称的文件中的数据,请使用 shell,但将输出重定向到您的文件。不要在后台运行命令,如果你想避免问题,不要使用 nohup。
    • 在我运行“docker run -p 9090:8080 docker_test”之后,我收到“错误:无法访问 jarfile docker.jar”,除了你的内容之外,我还需要改变什么吗?建议?
    • @AniruddhaRaje 你的docker.jar 文件在容器内的什么位置?
    • 是的,我正在使用 wget 来获取我的应用程序,即。来自 S3 的 docker.jar,在容器内,我已经更新了有问题的 Dockerfile。
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2021-12-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多