2015-03-05 19 views
21

Dato il seguente DockerfileDocker Copia e Modifica proprietario

FROM ubuntu 
RUN groupadd mygroup 
RUN useradd -ms /bin/bash -G mygroup john 
MKDIR /data 
COPY test/ /data/test data 
RUN chown -R john:mygroup /data 
CMD /bin/bash 

nella mia directory di prova, che viene copiato ho impostato i permessi dei file a 770.

Se faccio un su john dentro il mio container, ho non può accedere a nessuno dei file o sottodirectory nella mia directory di test. Sembra che questo problema sia correlato alla proprietà nel filesystem aufs, dove la directory copiata è ancora di proprietà di root e le autorizzazioni sono impostate su 770.

Esiste una soluzione per questo problema per impostare correttamente le autorizzazioni? Uno potrebbe essere quello di impostare i permessi della directory originale sull'uid dell'utente del contenitore prima di copiarlo. Ma questo sembra più un hack.

+0

prima di 'COPY' e' MKDIR' Penso che dovresti avere un 'USER john' – user2915097

+0

Forse questo potrebbe funzionare, ma dovrei creare la struttura di directory completa che viene copiata e quindi questo non è accettabile. –

risposta

4

Penso di aver trovato una soluzione, che funziona. L'uso di un contenitore di volumi di dati farà il trucco. Per prima cosa creare il contenitore del volume di dati, che contiene la copia del mio directory esterna:

FROM busybox 
RUN mkdir /data 
VOLUME /data 
COPY /test /data/test 
CMD /bin/sh 

Nel mio contenitore di applicazioni, dove ho i miei utenti, che potrebbe essere simile a questo

FROM ubuntu 
RUN groupadd mygroup 
RUN useradd -ms /bin/bash -G mygroup john 
COPY setpermissions.sh /root/setpermissions.sh 
CMD /root/setpermissions.sh && /bin/bash 

I SetPermissions lo script fa il lavoro di impostazione delle autorizzazioni degli utenti:

#!/bin/bash 

if [ ! -e /data/.bootstrapped ] ; then 
    chown -R john:mygroup /data 
    touch /data/.bootstrapped 
fi 

Ora non mi resta che utilizzare il --volumes-from <myDataContainerId> quando si esegue il contenitore di applicazioni.

+0

Questo è esattamente lo stesso che avevi prima. Dovresti considerare di accettare l'altra risposta come corretta. Usa una bandiera ufficiale per la finestra mobile senza script. –

17

Un --chown bandiera è stato finalmente aggiunto al COPY:

COPY --chown=patrick hostPath containerPath 

Questa nuova sintassi sembra funzionare su Docker 17.09.

Vedere the PR per ulteriori informazioni.

+0

per me ha funzionato con '--chown = user: group', ho avuto quell'utente e il gruppo creati nel container – Charan

Problemi correlati