2015-07-08 8 views
8

Ich versuche, Postgres in IBM-Containern zu starten. Ich habe gerade Volumen erstellt von:Kann ich Besitzer eines Verzeichnisses ändern, das auf einem Volume in IBM Containern eingehängt ist?

$ cf ic volume create pgdata 

es dann montieren:

$ cf ic run --volume pgdata:/var/pgsql -p 22 registry.ng.bluemix.net/ruimo/pgsql944-cli 

Nach dem Einloggen in den Behälter durch ssh, fand ich das bereitgestellte Verzeichnis dem Benutzer root gehört:

drwxr-xr-x 3 root root 4096 Jul 8 08:20 pgsql 

Seit postgres erlaubt nicht von root ausgeführt werden, ich möchte den Besitzer dieses Verzeichnisses ändern. Aber ich kann nicht den Besitzer des Verzeichnisses:

# chown postgres:postgres pgsql 
chown: changing ownership of 'pgsql': Permission denied 

Ist es möglich, Besitzer hängten Verzeichnis zu ändern?

Antwort

7

In IBM Container wird der Benutzer-Namensraum für Docker Motor aktiviert. Wenn der Benutzer-Namespace aktiviert ist, ist der effektive Stamm innerhalb des Containers ein Nicht-Root-Benutzer außerhalb des Containerprozesses und NFS erlaubt dem zugeordneten Benutzer ohne Rootberechtigung nicht, die Chown-Operation auf dem Datenträger innerhalb des Containers auszuführen. Bitte beachten Sie, dass das Volume pgdata ein NFS ist, dies kann durch Ausführen von mount -t nfs4 aus Container verifiziert werden.

Sie können die Abhilfe versuchen vorgeschlagen für How can I fix the permissions using docker on a bluemix volume?

In diesem Szenario es

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 
+0

Danke, postgres user zur Stammgruppe hinzugefügt hat vorläufig die Magie! – ruimo

+0

Dies scheint vorläufig zu helfen, aber wie würde es aussehen, um es dauerhaft zu machen?Wenn ich dem folge und dann einen neuen Container starte, bin ich zurück zu der Berechtigung verweigert für das Unterverzeichnis 'pgsql'. Ich benutze auch das 'postgres: 9.5' Bild, das die Dinge ein wenig anders machen könnte. – krsyoung

+0

Als Referenz konnte ich nicht mit dem offiziellen DockerHub postgres 9.5 Bild arbeiten. Es erforderte eine Änderung an der 'docker-entrightpoint.sh' Datei unter Verwendung einiger der obigen Ideen, bevor die Dinge funktionieren würden. – krsyoung

0

In Ihrer Dockerfile können Sie die Berechtigungen eines Verzeichnisses ändern.

RUN chown postgres:postgres pgsql

Zusätzlich, wenn Sie ssh in die Berechtigungen des Verzeichnisses unter Verwendung sudo ändern können. sudo chown postgres:postgres pgsql

+0

Beide nicht für mich arbeiten wird. Meinst du Vanilla Docker, aber IBM Container? – ruimo

+0

Beide sind für Vanille-Container anwendbar. Ibm Container sind das gleiche –

+0

@ruimo haben Sie immer noch dieses Problem? –

0
+0

Danke für Infos. 1, 2 hat nicht für mich funktioniert. Das Auffinden von "RUN chown" vor der Volume-Anweisung oder das Hinzufügen von "User root" vor "RUN chown" hat keine Auswirkung. Für Lösung 3 weiß ich nicht, wie ich die Option "cap-add" an den Befehl "cf ic run" übergeben kann ... – ruimo