gpt4 book ai didi

postgresql - Docker用户命名空间将容器中的用户映射到主机

转载 作者:行者123 更新时间:2023-11-29 11:59:11 28 4
gpt4 key购买 nike

我想将容器内的用户 postgres 或 root 映射到主机上的用户 myuser。网上有很多引用资料,但我不太清楚如何实现以下目标:

是否有一种简单的方法可以通过 docker-run 级别的简单命令行标志将容器内的任意用户映射到主机中的用户

将容器内的 root 用户映射到主机上的 myuser

docker run --user-remap "mysuser:root" -p 6379:6379 redis:alpine

将容器内的 postgres 映射到主机上的 myuser

docker run -it -p 5431:5432 --user-remap "myuser:postgres" --rm -v /home/myuser/data:/var/lib/postgresql/data postgres:9.6.0

我不想对所有容器应用相同的设置。因此,通过应用在 docker 守护程序级别执行此操作

sudo docker daemon --userns-remap myuser

并更新/etc/passwd、/etc/group、/etc/subuid、/etc/subgid 无助于解决我的问题。有没有办法在 docker run 阶段解决这个问题,以便这些设置可以逐个容器地应用。

谢谢

最佳答案

不,如果您想使用用户命名空间,目前还没有办法为绑定(bind)挂载的目录和文件重新映射用户。

基本上,您遇到的问题正是用户命名空间的目标;防止容器内的特权用户访问主机上的文件。这可以保护您免受能够从容器中逃脱的进程对主机造成的损害。

但是您的目标似乎是让 postgres 用户访问您主机上的文件,这些文件由本地用户拥有。对于这种情况,可能还有另一种方法;使用与在主机上拥有文件的用户相同的 uid:gid 运行容器。这可能需要更改图像(因为图像中的某些部分当前是使用 postgres 用户创建的,该用户当前具有不同的 uid:gid(另请参阅有关的一些信息这在 this answer )

目前,使用 postgres 官方图像执行此操作需要进行一些手动更改,但最近为官方 postgres 图像合并了一个拉取请求,这使得这项工作脱离了框(参见 docker-entrypoint.sh#L30-L41)

您可以在拉取请求中找到详细信息; https://github.com/docker-library/postgres/pull/253 ,以及相关文件; https://github.com/docker-library/docs/pull/802 .此更改应该很快可用,但与此同时,您可以创建扩展官方 PostgreSQL 镜像的自定义镜像。

关于postgresql - Docker用户命名空间将容器中的用户映射到主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40124560/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com