【问题标题】:docker build stuck at pm2 startdocker build 卡在 pm2 start
【发布时间】:2021-03-09 12:53:39
【问题描述】:

我想创建一个 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"]

这是我的 entrypoint.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 世界很陌生

【问题讨论】:

标签: node.js docker build containers pm2


【解决方案1】:

docker 中的 RUN 步骤执行命令,等待命令退出,并将容器文件系统的更改捕获为映像中的新层。因此 docker 将等到 pm2 start 命令退出,它不会出现它会退出,因为它是一个在端口上侦听请求的服务。

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

在高层次上,您希望将事物分成三个桶:

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

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2019-11-18
    相关资源
    最近更新 更多