2015-09-23 11 views
6

Durante lo sviluppo in un contenitore Docker su Linux, c'è un problema con le autorizzazioni: come gestire la proprietà dei file e le autorizzazioni tra l'host e il contenitore.Come gestisci le autorizzazioni durante lo sviluppo in un contenitore Docker?

Immaginate di avere un'immagine Docker che esegue Ubuntu e un server Apache. Utilizzando le impostazioni predefinite per (versioni recenti di) Apache, la radice del documento sarà /var/www/html e Apache verrà eseguito come utente www-data.

Per eseguire alcuni sviluppi, esporre la root dei documenti tramite Docker con -v /path/to/my/files:/var/www/html. Ed è qui che si pone il problema:

I file in /path/to/my/files appartengono ai contenitori www-data utente. Se sono fortunato e il mio ospite ha un utente www-data, sarà quell'utente; in caso contrario, sarà un utente distinto locale per il contenitore. Le autorizzazioni su quei file saranno (probabilmente) 0755.

Così, quando sto lavorando via come me stesso (un utente chiamato jsmith), quei file non possono essere modificati da me a causa di autorizzazioni di file errate & proprietà.

  • ho potuto cambiare la proprietà dei file da jsmith, ma che causerà problemi con Apache - avrà difficoltà i file accedendo nella radice del documento.

  • Posso modificare le autorizzazioni su 0777, ma tutti i nuovi file creati durante il mio lavoro saranno di proprietà di jsmith.

Il risultato finale è che è necessario adeguare costantemente la proprietà & i permessi sui file di sviluppo. Altre persone devono avere questo problema, ma ogni post che ho visto sull'argomento dell'utilizzo di Docker in un flusso di lavoro di sviluppo trascura semplicemente questo problema.

Io faccio avere una soluzione, ma non sono del tutto soddisfatto:

  • ho creato una cartella /src/myproject. Questo contiene i miei file di sviluppo ed è di proprietà di www-data:www-data.

  • Utilizzando BindFS, io montare /src/myproject a ~/myproject, mappatura www-data:www-data a jsmith:jsmith. Questo mi consente di modificare i file in ~/myproject senza problemi con le autorizzazioni.

  • Il contenitore Apache Docker monta la directory /src/myproject con -v /src/myproject:/var/www/html. Apache vede la proprietà dei file www-data e non ha problemi.

Questo funziona bene, ma sembra eccessivamente complicato. Come fanno gli altri a risolvere questo problema?

+0

Hai trovato qualche altro metodo per risolvere il problema delle premesse? – Vail

+0

Spiacente, non ho suggerimenti. Sono venuto qui cercando la stessa risposta: il tuo suggerimento su BindFS è stato utile per me. – jdhildeb

risposta

0

Mi vengono in mente due soluzioni:

utilizzare un ID di gruppo comune fra tutti gli sviluppatori e le immagini.L'uid potrebbe finire per essere numerico nel contenitore, ma il gid fornirebbe almeno l'accesso in lettura e facoltativamente l'accesso in scrittura, senza darlo a livello globale. Usa il bit setgid nelle directory che contengono per creare automaticamente i file con questo gid. Questo non è l'approccio più pulito e può portare a dare l'accesso ad altri membri del gruppo, ma potrebbe essere molto più semplice da gestire a seconda del flusso di lavoro della tua organizzazione.

La seconda opzione è denominata volumi, che credo siano stati aggiunti dopo aver posto questa domanda. Ti permettono di avere i dati esistenti con l'uid/gid noto ai container. Questo ha lo svantaggio di spostare i dati nelle directory interne della finestra mobile in cui è meno facile gestirli al di fuori di un container. Tuttavia, esistono approcci microservizi che mantengono il volume sincronizzato con una fonte esterna (git pull, rsync, ecc.) Utilizzando un contenitore dedicato che monta lo stesso volume. In pratica, tutte le letture e le scritture dei dati vengono spostate in contenitori, inclusi eventuali backup, routine di aggiornamento e script di test.

Problemi correlati