在 Docker 容器中使用哑初始化运行节点

分享于2022年07月17日 docker node.js tini 问答
【问题标题】:在 Docker 容器中使用哑初始化运行节点(Running Node with dumb-init inside a Docker Container)
【发布时间】:2022-06-29 01:56:46
【问题描述】:

我试图在我的 docker 容器中使用哑初始化,但容器操作系统找不到可执行文件。我的文件是

FROM node:16 AS builder

RUN apt update
RUN apt install dumb-init

WORKDIR /app

COPY package.json .

RUN yarn install

COPY . .

RUN yarn run build

FROM node:16 AS production

WORKDIR /app

COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/yarn.lock ./yarn.lock
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules

ENTRYPOINT ["/usr/bin/dumb-init", "--"]
CMD ["node", "dist/main"]

当我运行它时

docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "/usr/bin/dumb-init": stat /usr/bin/dumb-init: no such file or directory: unknown.

  • 您没有在最终(“生产”)构建阶段安装 dumb-init

【解决方案1】:

您最终的 nodejs:16 映像是基于debian 的映像,但是您需要在其上安装 dumb-init

RUN apt-get install dumb-init

基于 debian / ubuntu 的图像

RUN apk add dumb-init

基于 Alpine 的图像

  • 其实解决方案是结合了这个和问题iteslf中留下的评论。