Postgresql 如何映射主机上已存在的Docker容器中定义的用户权限

Postgresql 如何映射主机上已存在的Docker容器中定义的用户权限,postgresql,docker,permissions,dockerfile,Postgresql,Docker,Permissions,Dockerfile,我想在一个装有卷的Docker容器中运行postgres。我正在按照描述的步骤进行操作。但是,容器从未启动。我认为这是因为/var/lib/postgresql/data目录由用户postgres拥有uid999,而组postgres拥有gid999 我的理解是,我需要在我的主机上创建一个具有相同的uid和gid的用户和组(名称无关紧要),并将这些权限分配给我在主机上装载的目录 问题是,uid和gid已在我的主机上使用。我可以从Docker文件重建Docker映像,并修改uid和gid值,但我认

我想在一个装有卷的Docker容器中运行postgres。我正在按照描述的步骤进行操作。但是,容器从未启动。我认为这是因为
/var/lib/postgresql/data
目录由用户
postgres
拥有
uid999
,而组
postgres
拥有
gid999

我的理解是,我需要在我的主机上创建一个具有相同的
uid
gid
的用户和组(名称无关紧要),并将这些权限分配给我在主机上装载的目录

问题是,
uid
gid
已在我的主机上使用。我可以从Docker文件重建Docker映像,并修改
uid
gid
值,但我认为这不是一个好的长期解决方案,因为我希望能够使用Docker Hub的官方postgres映像

我的问题是,如果容器定义了主机上已经存在的权限,那么如何将主机的权限映射到容器,而不必使用环境中的配置重新构建容器本身


如果我误解了事情或偏离了主题,那么解决这个问题的正确方法是什么?

关于
/var/lib/postgresql/data
你是对的。运行容器时,它会在容器中将该目录中文件的所有者更改为user
postgres
(用户id为999)。如果文件已存在于装入的卷中,如果运行docker的用户没有正确的权限,则更改所有权可能会失败。关于docker中的文件所有权,这里有一个很好的解释

我的问题是,如果容器定义了主机上已经存在的权限,那么如何将主机的权限映射到容器,而不必使用环境中的配置重新构建容器本身

我认为您可能正在寻找docker用户名称空间。它允许您修复docker卷中的权限

对于您的特定情况,如果不希望装入卷中的文件具有
uid
999,您可以覆盖容器的入口点并更改用户
postgres
uid

docker run --entrypoint="bash" postgres -c  'usermod -u 2006 postgres;exec /docker-entrypoint.sh postgres'