2015-07-08 13 views
8

Sto provando a lanciare postgres in contenitori IBM. Ho appena creato volume:Posso cambiare il proprietario della directory montata sul volume nei contenitori IBM?

$ cf ic volume create pgdata 

Poi montarlo:

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

Dopo l'accesso al contenitore attraverso ssh, ho trovato la directory montata è di proprietà di root:

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

Dal postgres non consente di eseguire da root, voglio cambiare il proprietario di questa directory. Ma non posso cambiare il proprietario di questa directory:

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

E 'possibile cambiare il proprietario della directory montata?

risposta

7

In IBM contenitori, il namespace utente è abilitato per motore finestra mobile. Quando lo spazio dei nomi utente è abilitato, la radice effettiva all'interno del contenitore è un utente non root all'esterno del processo contenitore e NFS non consente all'utente mappato non root di eseguire l'operazione chown sul volume all'interno del contenitore. Si noti che il volume pgdata è un NFS, questo può essere verificato eseguendo mount -t nfs4 dal contenitore.

È possibile provare la soluzione suggerita per How can I fix the permissions using docker on a bluemix volume?

In questo scenario sarà

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

Grazie, l'utente postgres al gruppo root ha tentativamente fatto la magia! – ruimo

+0

Questo sembra aiutare provvisoriamente ma come sembrerebbe renderlo permanente?Se seguo questo e poi avvio un nuovo container, torno al permesso negato nella sottodirectory 'pgsql'. Sto anche usando l'immagine 'postgres: 9.5' che potrebbe rendere le cose un po 'diverse. – krsyoung

+0

Per riferimento non sono riuscito a farlo funzionare utilizzando l'immagine ufficiale DockerHub postgres 9.5. Richiedeva la modifica del file 'docker-entrypoint.sh' usando alcune delle idee precedenti prima che le cose funzionassero. – krsyoung

0

Nel file Docker è possibile modificare le autorizzazioni di una directory.

RUN chown postgres:postgres pgsql

Inoltre quando si SSH è possibile modificare le autorizzazioni della directory utilizzando sudo. sudo chown postgres:postgres pgsql

+0

Entrambi non ha funzionato per me. Intendi vanilla docker ma contenitori IBM? – ruimo

+0

Entrambi sono applicabili ai contenitori di vaniglia. I contenitori Ibm sono la stessa cosa –

+0

@ruimo hai ancora questo problema? –

0
+0

Grazie per le informazioni. 1, 2 non ha funzionato per me. Individuare "RUN chown" prima dell'istruzione del volume o aggiungere "User root" prima di "RUN chown" non ha avuto alcun effetto. Per la soluzione 3, non so come posso passare l'opzione --cap-add al comando "cf ic run" ... – ruimo