【问题标题】:Docker Node permission denied when using non-root user使用非 root 用户时拒绝 Docker 节点权限
【发布时间】:2019-02-05 06:23:31
【问题描述】:

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

错误:对于节点无法启动服务节点:OCI 运行时创建失败:container_linux.go:348:启动容器进程导致“chdir to cwd (\"/foo\") set in config.json failed: permission denied”:未知

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

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

【问题讨论】:

标签: node.js docker docker-compose debian


【解决方案1】:

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

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

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

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

如下:

FROM 节点:最新 运行 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 - 复制 entrypoint.sh /entrypoint.sh 入口点 ["/entrypoint.sh"]

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

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

也许在主机上更改卷的权限是更快的方法。

【讨论】:

  • o+ 是关键
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 2020-05-12
  • 2017-03-27
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
相关资源
最近更新 更多