容器退出而不是在后台运行
这里的Dockerfile用于创build映像image/name
,然后运行以创build容器,但是docker ps
report service已退出。 预计将继续运行,以便为网站服务,但不这样做。 如何解决?
//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
看起来这是微不足道的错误。
根据main.js
最后一行,预计main.js
在/
目录下是可用的,
CMD node ./main.js
不过,我相信, main.js
可以在/opt/bundle/programs/server/
目录下find。
现在,您可以select运行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
绝对path:
删除现有的图像。 修改Dockerfile
并Dockerfile
更改以下语句
CMD node ./main.js
至
CMD node /opt/bundle/programs/server/main.js
现在重build图像。 在这种情况下,您不必在运行容器的命令中提及要运行的应用程序。 与上面不同的是,如果您看到选项#1,#2,则还指定在运行容器时要调用哪个应用程序。 相反,可以简单地运行图像,因为图像知道默认运行哪个应用程序。
docker run -tid -p 80:80 image/name
docker容器完成/完成内部运行的进程时显示Exited
状态。
main.js
不能位于正确的位置,处理立即完成,容器退出你的情况。
希望这是有帮助的。