我想从jdk创建新图像,构建它,它的工作原理;当我运行我的新图像时,它会返回容器ID,但在docker ps
时无法获取进程信息,这是我的dockerfile:
# specified jdk version
FROM openjdk:7-jre
# env
ENV APP_HOME /usr/src/KOAL-OCSP
ENV PATH $APP_HOME:$PATH
# copy my app in .zip to /usr/src
COPY myapp.zip /usr/src/
# unzip copy file
RUN unzip /usr/src/myapp.zip
WORKDIR $APP_HOME
#port
expose 80
#run the setup script of my app when start container
CMD ["service.sh" "start"]
service.sh
是一个安装脚本是我的应用程序根文件,我希望在运行新的自构建映像时脚本可以自动执行。
答案 0 :(得分:0)
我怀疑容器已成功执行并退出。只要您使用services.sh
脚本开始的进程仍在运行,容器就会保持活动状态。
在您的情况下,services.sh
已执行并退出,从而导致容器退出。
要查看所有容器,请使用docker ps -a
<强>更新强>:
错误/bin/sh: 1: ./service.sh: not found
表示在Docker镜像中的services.sh
下找不到$APP_HOME
脚本。请务必使用
$APP_HOME
下添加
ADD `service.sh` $APP_HOME
答案 1 :(得分:0)
CMD ["service.sh" "start"]
以上是无效的json,它在数组中缺少一个逗号,因此docker会将其作为字符串执行,因为["service.sh"
将不会被发现作为运行命令而失败。
如果您使用docker ps -a
,您将看到所有容器的列表,包括已退出的容器。从那里,您可以使用docker logs $(docker ps -lq)
查看您尝试运行的最后一个容器的日志。您可以docker inspect $(docker ps -lq)
查看有关其尝试运行的最后一个容器的所有详细信息,包括退出代码。
要超越当前错误,请使用缺少的逗号更正语法:
CMD ["service.sh", "start"]
对于您看到的下一个问题,未找到&#34;&#34;错误可以表明:
#!/bin/bash
但在您的容器中只有/bin/sh
。当您在Windows系统上编辑文件并且^M
换行符成为容器正在查找的二进制文件名称(/bin/sh^M
而不是/bin/sh
)时,也会发生这种情况。