我正在尝试在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
是否可以更改已安装目录的所有者?
答案 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)