使用非root用户时拒绝Docker节点权限

时间:2018-08-30 10:28:45

标签: node.js docker docker-compose debian

当我尝试以非root用户身份将节点作为docker容器运行时,它说:

  

错误:节点无法启动服务节点:OCI运行时创建失败:container_linux.go:348:启动容器进程导致在config.json中设置“ chdir到cwd(\“ / foo \”)失败:权限被拒绝”:未知

我的docker-compose.yml看起来像这样:

...
node:
  image: node:latest
  container_name: my_node_thingy
  ports:
    - "3003:3000"
  user: "node"
  working_dir: /foo
  volumes:
    - /var/project:/foo/
  command: "node /foo/app.js"
  networks:
    - my-network
...

当我将“ root”设置为用户时,它可以正常工作,但是通过执行以下操作创建新的容器时,容器将不会启动:

adduser --disabled-password --gecos '' node
adduser node sudo
echo "node ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/node

有人可以向我解释如何正确设置用户吗?

1 个答案:

答案 0 :(得分:0)

如果您有权执行chmod -R 777 /var/project,请这样做,然后一切正常,您可以继续使用user: node

如果您没有权限,为什么不将代码克隆到您拥有权限的文件夹中,然后在上面重复进行?

如果您仍然坚持说要使Dockerfile适用于更坚固的环境。然后,您可能必须使用gosu

您需要定义一个继承自node:latest的新dockerfile,在dockerfile中,安装gosu

类似如下:

FROM node:latest
RUN GOSU_SHA=5ec5d23079e94aea5f7ed92ee8a1a34bbf64c2d4053dadf383992908a2f9dc8a \
  && curl -sSL -o /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.9/gosu-$(dpkg --print-architecture)" \
  && chmod +x /usr/local/bin/gosu \
  && echo "$GOSU_SHA  /usr/local/bin/gosu" | sha256sum -c - 
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

并且,在entrypoint.sh中,您首先需要使用gosu更改/foo的权限,然后启动您的nodejs项目。

最后,从docker-compose.yml中删除command

也许更快地更改主机上的卷许可。