如何解决docker build 卡在 pm2 start
我想创建一个 docker 容器。我写了一个这样的 Docker 文件
FROM node:12-buster
workdir /opt/myapps/
copY . /opt/myapps/
RUN apt update
RUN apt upgrade -y
RUN apt install git -y
RUN git config --global user.email "user@git.com"
RUN git config --global user.name "user"
RUN npm install -g pm2
RUN pm2-runtime main.js
RUN pm2 save
RUN chmod +x /opt/myapps/entrypoint.sh
EXPOSE 4001
CMD ["./entrypoint.sh"]
这是我的入口点.sh
#!/bin/bash
#node thing
npm install
#npm start
pm2-runtime main.js --exp-backoff-restart-delay=100
当我进行构建时,它肯定会卡在这样的最终过程中
Step 10/14 : RUN pm2-runtime main.js
---> Running in 6061a8236379
2021-03-09T12:38:20: PM2 log: Launching in no daemon mode
2021-03-09T12:38:20: PM2 log: App [main:0] starting in -fork mode-
2021-03-09T12:38:20: PM2 log: App [main:0] online
Server started on port :4001
当它到达那里时,这个过程从未继续。有谁知道为什么会这样?我对 docker 世界很陌生
解决方法
docker 中的一个 RUN 步骤执行命令,等待命令退出,并将容器文件系统的更改捕获为镜像中的新层。因此 docker 会一直等到 pm2 start 命令退出,它似乎不会退出,因为它是一个在端口上侦听请求的服务。
对于运行服务,您通常希望此运行作为容器的入口点,以便在容器运行时访问服务,而不是在构建映像期间启动它。
概括而言,您希望将事物分为三个部分:
- 应用程序的二进制文件和库安装,这些进入使用 Dockerfile 创建的映像
- 持久数据,这是一个卷
- 配置,这在撰写文件、kubernetes 清单、环境变量中,或作为文件注入卷中
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。