【发布时间】:2021-12-07 22:33:18
【问题描述】:
我有一个带有 nodejs 和 pm2 作为启动命令的容器,在 OpenShift 上我在启动时收到此错误:
错误:EACCES:权限被拒绝,mkdir '/.pm2'
我在马拉松主持人上尝试了相同的图像,效果很好。
我需要用 UserIds 改变一些东西吗?
Dockerfile:
FROM node:7.4-alpine
RUN npm install --global yarn pm2
RUN mkdir /src
COPY . /src
WORKDIR /src
RUN yarn install --production
EXPOSE 8100
CMD ["pm2-docker", "start", "--auto-exit", "--env", "production", "process.yml"]
更新
节点映像已经创建了一个 UID 为 1000 的新用户“节点”,以不以 root 身份运行该映像。
我还尝试修复权限并将用户“节点”添加到根组。
此外,我告诉 pm2 它应该与 ENV var 一起使用哪个目录:
PM2_HOME=/home/node/app/.pm2
但我仍然得到错误:
Error: EACCES: permission denied, mkdir '/home/node/app/.pm2'
更新的 Dockerfile:
FROM node:7.4-alpine
RUN npm install --global yarn pm2
RUN adduser node root
COPY . /home/node/app
WORKDIR /home/node/app
RUN chmod -R 755 /home/node/app
RUN chown -R node:node /home/node/app
RUN yarn install --production
EXPOSE 8100
USER 1000
CMD ["pm2-docker", "start", "--auto-exit", "--env", "production", "process.yml"]
更新2 感谢 Graham Dumpleton,我得到了它的工作
FROM node:7.4-alpine
RUN npm install --global yarn pm2
RUN adduser node root
COPY . /home/node/app
WORKDIR /home/node/app
RUN yarn install --production
RUN chmod -R 775 /home/node/app
RUN chown -R node:root /home/node/app
EXPOSE 8100
USER 1000
CMD ["pm2-docker", "start", "--auto-exit", "--env", "production", "process.yml"]
【问题讨论】:
-
哪条 RUN 行给你这个错误?编辑:抱歉,运行容器时会发生这种情况......
-
看起来 pm2-docker 正在忽略当前工作目录。此外,通过检查映像历史记录(我找不到 7.4 的 Dockerfile),看起来预期的工作目录是 /home/node。可能 pm2-docker (从未使用过)也希望这是工作目录。您可以尝试更改 COPY 和 WORKDIR 以使源位于 /home/node 内吗?
-
Dockerfile 应该是这样的:github.com/nodejs/docker-node/blob/…
-
其实我想知道我是否需要pm2,当节点进程崩溃时容器不是自动重启吗?
-
您是哪个内核版本,您在守护进程中使用哪个存储驱动程序?您可能会遇到关于权限和旧内核的覆盖驱动程序的已知问题。
标签: node.js docker openshift pm2