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



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

错误:对于节点无法启动服务节点:OCI 运行时创建失败:container_linux.go:348:启动容器进程导致"chdir 到 config.json 中设置的 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

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

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

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

如果您仍然坚持要使Dockerfile适合更坚固的环境。然后你可能不得不使用gosu.

你需要定义一个新的dockerfile inheritfromnode:latest,在dockerfile中,安装 gosu。

如下所示:

从节点:最新 运行 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" |SHA256总和 -c - 复制 entrypoint.sh/entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]

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

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

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

相关内容

  • 没有找到相关文章

最新更新