我的Dockerfile出现问题(下面的代码)
FROM node:4.2.6
MAINTAINER kamil
RUN useradd -ms /bin/bash node
RUN mkdir -p /home/node/app && chown -R node:node /home/node/app
WORKDIR /home/node/app
COPY /myFolder .
USER node
COPY --chown=node:node . .
RUN ["chmod", "777", "/home/node/app"]
ENTRYPOINT /home/node/app
CMD ["node myApp.js"]
我正在使用docker构建镜像
"docker build -t my_docker_image ."
并没有出现错误。
接下来,我使用命令"docker run --name my_run_docker_image -d my_docker_image"
运行它,并且也完成了没有错误,但是当我想使用"docker ps -l"
命令检查我的新容器的状态时,我正在获取该容器的状态信息是“已终止”。
因此,我尝试使用命令"docker start -a my_run_docker_image"
再次运行它,但收到错误消息:
“节点MyApp.js:1:节点myApp.js:/ home / node / app:权限被拒绝”
我试图以root用户(没有指定用户)运行它,但是每次遇到相同的问题。
答案 0 :(得分:0)
看来您的用户添加命令可能有问题。
更改
RUN useradd -ms /bin/bash/node
到
RUN useradd -ms /bin/bash node
还有
RUN mkdir -p /home/node/app && -R node:node /home/node/app
需要更改为
RUN mkdir -p /home/node/app && chown -R node:node /home/node/app
答案 1 :(得分:0)
ENTRYPOINT和CMD告诉Docker启动容器时要运行什么命令。由于ENTRYPOINT是裸露的字符串,因此将其包裹在外壳中,而CMD将被忽略。因此,当您启动容器时,主要的容器过程是
/bin/sh -c '/home/node/app'
哪个失败了,因为那是一个目录。
在这个Dockerfile中,我大致建议两件事。首先是以root用户身份安装应用程序,然后以非root用户身份运行该应用程序,以防止意外覆盖应用程序代码。第二种情况是,在大多数情况下,CMD优先于ENTRYPOINT,除非您清楚它们之间的交互方式。您可能会想出更多类似的东西:
FROM node:4.2.6
MAINTAINER kamil
WORKDIR /app # Docker will create on first use
COPY myFolder .
RUN useradd node # its shell should never matter
USER node
CMD ["node", "myApp.js"]