我有一个使用Node.js和pm2作为启动命令的容器,在OpenShift上启动时出现如下错误:
Error: EACCES: permission denied, mkdir '/.pm2'
我在Marathon上尝试相同的镜像,它可以正常工作。
我需要更改用户ID吗?
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"]
更新
节点镜像已经创建了一个新的用户"node",UID为1000,以便不以root身份运行该镜像。
我还尝试修复权限并将用户"node"添加到root组中。
此外,我使用环境变量告诉pm2应该使用哪个目录:
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"]