我想从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是一个安装脚本是我的应用程序根文件,我希望这个脚本能在运行新的自建镜像时自动执行。
发布于 2018-03-05 21:17:02
我怀疑容器已经成功执行并退出了。只要使用services.sh脚本启动的进程仍在运行,容器就会一直处于活动状态。
在您的示例中,services.sh已执行并退出,从而导致容器退出。
要查看所有容器,请使用docker ps -a
更新
错误/bin/sh: 1: ./service.sh: not found表示在Docker镜像内的$APP_HOME下找不到services.sh脚本。确保使用以下命令将其添加到$APP_HOME下
ADD `service.sh` $APP_HOME发布于 2018-03-05 21:40:37
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"]对于您看到的下一个问题,“找不到”错误可能表示:
#!/bin/bash,但容器中只有/bin/sh。当您在Windows系统上编辑文件并使^M换行符成为容器正在查找的二进制文件名称的一部分时,也会发生这种情况(如果您正在运行的可执行文件具有容器中不存在的库依赖项,则会发生这种情况,而不是/bin/sh^M二进制文件)。例如,如果您在glibc环境上构建,并在musl libc环境下运行容器,则会出现相同的错误消息。https://stackoverflow.com/questions/49110878
复制相似问题