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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用非root用户时,Docker节点权限被拒绝相关的知识,希望对你有一定的参考价值。

当我尝试将节点作为具有非root用户的docker容器运行时,它说:

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

我的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

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

答案

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

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

如果你仍然坚持说你想让Dockerfile适合更加恶劣的环境。那么你可能不得不使用gosu

您需要定义一个新的dockerfile继承自node:latest,在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

也许更改主机卷的权限是更快捷的方式。

以上是关于使用非root用户时,Docker节点权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

使用 docker 文件运行脚本文件 (.sh) 时权限被拒绝

EACCES:权限被拒绝 mkdir ...尝试在节点项目中使用 docker 卷时

使用 mariadb 10.4.8 docker 容器的用户“root”@“localhost”的访问被拒绝,使用 docker compose 并在附加外部卷时发出问题

在非特权的基于 Ubuntu 的 Docker 容器中使用 gcsfuse 拒绝权限

Docker:非root用户启动操作docker

使用 root 用户的 NPM 安装权限被拒绝错误