容器退出而不是在后台运行

时间:2016-11-13 23:14:36

标签: meteor docker dockerfile

此处的Dockerfile用于创建映像image/name,然后运行以创建容器,但docker ps报告服务已退出。预计它将继续运行以便为网站提供服务但不会这样做。怎么修好?

//Dockerfile
FROM lambdalinux/baseimage-amzn:2016.09-000
RUN curl --silent --location https://rpm.nodesource.com/setup_4.x | bash -
RUN yum install -y tar nodejs
COPY ./bundle /opt/bundle/
WORKDIR /opt/bundle/programs/server/
RUN npm install
CMD node ./main.js

在命令行docker run -tid -p 80:80 image/name

1 个答案:

答案 0 :(得分:0)

看起来这是一个微不足道的错误。

根据main.js的最后一行,/目录下的Dockerfile是可用的,即,{ CMD node ./main.js

但是,我相信main.js位于/opt/bundle/programs/server/目录下。

现在您可以选择运行main应用程序。

1而不修改图像:

只需更改docker run并告知要调用的应用程序

docker run -tid -p 80:80 image/name node /opt/bundle/programs/server/main.js

2没有修改映像:从主机到容器挂载本地目录:

与第一种情况相同。我们假设应用程序在侧面映像中不可用,并且可在主机/本地计算机中使用。因此,将本地目录挂载到容器并运行该应用程序。在这种情况下,当前目录中有一个应用程序app2.js

docker run -p 80:80 -v $(pwd):/share -itd image/name node /share/app2.js

3修改图像,参考CMD中的绝对路径:

删除现有图片。修改Dockerfile并从

更改以下声明
CMD node ./main.js

CMD node /opt/bundle/programs/server/main.js  

现在重建图像。在这种情况下,您不必在运行容器时在命令中提及要运行的应用程序。与上面不同,如果您看到选项#1,#2,还会指定在运行容器时要调用的应用程序。相反,可以简单地运行图像,因为图像知道默认运行哪个应用程序。

docker run -tid -p 80:80 image/name
当docker容器完成/完成内部运行的进程时,会显示

Exited状态。

main.js无法找到正确的位置,流程立即完成,容器退出您的情况。

希望这有用。