微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

docker build 卡在 pm2 start

如何解决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 命令退出,它似乎不会退出,因为它是一个在端口上侦听请求的服务。

对于运行服务,您通常希望此运行作为容器的入口点,以便在容器运行时访问服务,而不是在构建映像期间启动它。

概括而言,您希望将事物分为三个部分:

  1. 应用程序的二进制文件和库安装,这些进入使用 Dockerfile 创建的映像
  2. 持久数据,这是一个卷
  3. 配置,这在撰写文件、kubernetes 清单、环境变量中,或作为文件注入卷中

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。