Postgresql 如何映射主机上已存在的Docker容器中定义的用户权限
我想在一个装有卷的Docker容器中运行postgres。我正在按照描述的步骤进行操作。但是,容器从未启动。我认为这是因为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值,但我认
/var/lib/postgresql/data
目录由用户postgres
拥有uid999
,而组postgres
拥有gid999
我的理解是,我需要在我的主机上创建一个具有相同的uid
和gid
的用户和组(名称无关紧要),并将这些权限分配给我在主机上装载的目录
问题是,uid
和gid
已在我的主机上使用。我可以从Docker文件重建Docker映像,并修改uid
和gid
值,但我认为这不是一个好的长期解决方案,因为我希望能够使用Docker Hub的官方postgres映像
我的问题是,如果容器定义了主机上已经存在的权限,那么如何将主机的权限映射到容器,而不必使用环境中的配置重新构建容器本身
如果我误解了事情或偏离了主题,那么解决这个问题的正确方法是什么?关于
/var/lib/postgresql/data
你是对的。运行容器时,它会在容器中将该目录中文件的所有者更改为userpostgres
(用户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'