我可以更改IBM容器中装载的目录的所有者吗?

时间:2015-07-08 10:37:31

标签: containers ibm-cloud

我正在尝试在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

是否可以更改已安装目录的所有者?

3 个答案:

答案 0 :(得分:7)

在IBM Containers中,为docker引擎启用了用户命名空间。启用用户命名空间时,容器内的有效根是容器进程外的非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

答案 1 :(得分:0)

在Dockerfile中,您可以修改目录的权限。

RUN chown postgres:postgres pgsql

此外,当您输入时,可以使用sudo修改目录的权限。 sudo chown postgres:postgres pgsql

答案 2 :(得分:0)