我可以更改安装在 IBM 容器中的卷上的目录的所有者吗?
Can I change owner of directory that is mounted on volume in IBM containers?
我正在尝试在 IBM 容器中启动 postgres。我刚刚通过以下方式创建了卷:
$ cf ic volume create pgdata
然后挂载它:
$ cf ic run --volume pgdata:/var/pgsql -p 22 registry.ng.bluemix.net/ruimo/pgsql944-cli
通过ssh登录容器后,发现挂载目录为root所有:
drwxr-xr-x 3 root root 4096 Jul 8 08:20 pgsql
因为 postgres 不允许 运行 root,我想改变这个目录的所有者。但我无法更改此目录的所有者:
# chown postgres:postgres pgsql
chown: changing ownership of 'pgsql': Permission denied
是否可以更改挂载目录的所有者?
在您的 Dockerfile 中,您可以修改目录的权限。
RUN chown postgres:postgres pgsql
此外,当您通过 ssh 登录时,您可以使用 sudo
修改目录的权限。
sudo chown postgres:postgres pgsql
这里有 3 种不同但可能的解决方案:
在 IBM Containers 中,为 docker 引擎启用了用户命名空间。当启用用户命名空间时,容器内的有效 root 是容器进程外的非 root 用户,并且 NFS 不允许映射的非 root 用户对容器内的卷执行 chown 操作。请注意卷 pgdata
是一个 NFS,这可以通过从容器中执行 mount -t nfs4
来验证。
您可以尝试建议的解决方法
How can I fix the permissions using docker on a bluemix volume?
在这种情况下它将是
1. Mount the Volume to `/mnt/pgdata` inside the container
cf ic run --volume pgdata:/mnt/pgdata -p 22 registry.ng.bluemix.net/ruimo/pgsql944-cli
2. Inside the container
2.1 Create "postgres" group and user
groupadd --gid 1010 postgres
useradd --uid 1010 --gid 1010 -m --shell /bin/bash postgres
2.2 Add the user to group "root"
adduser postgres root
chmod 775 /mnt/pgdata
2.3 Create pgsql directory under bind-mount volume
su -c "mkdir -p /mnt/pgdata/pgsql" postgres
ln -sf /mnt/pgdata/pgsql /var/pgsql
2.2 Remove the user from group "root"
deluser postgres root
chmod 755 /mnt/pgdata
我正在尝试在 IBM 容器中启动 postgres。我刚刚通过以下方式创建了卷:
$ cf ic volume create pgdata
然后挂载它:
$ cf ic run --volume pgdata:/var/pgsql -p 22 registry.ng.bluemix.net/ruimo/pgsql944-cli
通过ssh登录容器后,发现挂载目录为root所有:
drwxr-xr-x 3 root root 4096 Jul 8 08:20 pgsql
因为 postgres 不允许 运行 root,我想改变这个目录的所有者。但我无法更改此目录的所有者:
# chown postgres:postgres pgsql
chown: changing ownership of 'pgsql': Permission denied
是否可以更改挂载目录的所有者?
在您的 Dockerfile 中,您可以修改目录的权限。
RUN chown postgres:postgres pgsql
此外,当您通过 ssh 登录时,您可以使用 sudo
修改目录的权限。
sudo chown postgres:postgres pgsql
这里有 3 种不同但可能的解决方案:
在 IBM Containers 中,为 docker 引擎启用了用户命名空间。当启用用户命名空间时,容器内的有效 root 是容器进程外的非 root 用户,并且 NFS 不允许映射的非 root 用户对容器内的卷执行 chown 操作。请注意卷 pgdata
是一个 NFS,这可以通过从容器中执行 mount -t nfs4
来验证。
您可以尝试建议的解决方法 How can I fix the permissions using docker on a bluemix volume?
在这种情况下它将是
1. Mount the Volume to `/mnt/pgdata` inside the container
cf ic run --volume pgdata:/mnt/pgdata -p 22 registry.ng.bluemix.net/ruimo/pgsql944-cli
2. Inside the container
2.1 Create "postgres" group and user
groupadd --gid 1010 postgres
useradd --uid 1010 --gid 1010 -m --shell /bin/bash postgres
2.2 Add the user to group "root"
adduser postgres root
chmod 775 /mnt/pgdata
2.3 Create pgsql directory under bind-mount volume
su -c "mkdir -p /mnt/pgdata/pgsql" postgres
ln -sf /mnt/pgdata/pgsql /var/pgsql
2.2 Remove the user from group "root"
deluser postgres root
chmod 755 /mnt/pgdata