ivo*_*oba 6 node.js openshift docker pm2
我有一个容器,其中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"]
Run Code Online (Sandbox Code Playgroud)
更新
节点映像已创建具有UID 1000的新用户"节点",以便不以root身份运行映像.
我还尝试修复权限并将用户"node"添加到根组.
进一步我告诉pm2它应该与ENV var一起使用哪个目录:
PM2_HOME = /家庭/节点/应用/ .pm2
但我仍然得到错误:
Error: EACCES: permission denied, mkdir '/home/node/app/.pm2'
Run Code Online (Sandbox Code Playgroud)
更新了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"]
Run Code Online (Sandbox Code Playgroud)
更新2 感谢格雷厄姆·杜普顿,我得到了它的工作
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 Code Online (Sandbox Code Playgroud)
Gra*_*ton 12
默认情况下,OpenShift将以非root用户身份运行容器.因此,如果应用程序需要以root身份运行,则应用程序可能会失败.是否可以将容器配置为以root身份运行取决于您在群集中拥有的权限.
最好设计容器和应用程序,以便它不必以root身份运行.
一些建议.
创建一个特殊的UNIX用户来运行应用程序,并在该语句的USER语句中设置该用户(使用其uid)Dockerfile.使用户组成为根组.
对/src目录及其下的所有内容的修复权限由特殊用户拥有.确保一切都是组根.确保需要可写的任何内容都可写入组root.
确保您设置HOME到/src在Dockerfile.
完成后,当OpenShift将您的容器作为已分配的uid运行时,其中组是root,然后由于所有组都可写,应用程序仍然可以更新文件/src.HOME设置的变量确保通过代码写入主目录的任何内容都进入可写/src区域.
| 归档时间: |
|
| 查看次数: |
7985 次 |
| 最近记录: |