我想将用户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
阶段解决此问题,以便可以逐个容器地应用这些设置。
由于
答案 0 :(得分:4)
不,如果您想使用用户命名空间,那么目前无法为绑定安装的目录和文件重新映射用户。
基本上,您遇到的问题是用户命名空间的确切目标;防止容器内的特权用户访问主机上的文件。这可以保护您免受可以逃脱容器的过程的影响。
然而看起来您的目标是让 postgres 用户访问您的主机上的文件,这些文件由本地用户拥有。对于这种情况,可能还有另一种方法;使用与拥有主机上文件的用户相同的uid:gid
运行容器。这可能需要更改图像(因为图像中的某些部分当前是使用postgres
用户创建的,目前该用户具有不同的uid:gid
(另请参阅this answer中的相关信息)
目前,使用postgres
官方图片进行此操作需要进行一些手动更改,但最近为官方postgres
图片合并了拉取请求,这使得此工作开箱即用(请参阅{{3 }})
您可以找到拉取请求的详细信息; docker-entrypoint.sh#L30-L41
以及相关文档; https://github.com/docker-library/postgres/pull/253。此更改应尽快提供,但与此同时,您可以创建扩展官方PostgreSQL映像的自定义映像。