2016-04-11 38 views
7

Ho questo contenitore basato su debian:jessie (ma questo non è molto rilevante in quanto ho avuto lo stesso problema con alpine:3.3). Ottengo al punto in cui ho bisogno diCome si monta --bind all'interno di un contenitore Docker?

mount --bind /htdocs/www /home/user/example.com/www 

e ottengo

mount: permission denied 

io non riesco a trovare nulla in qualsiasi log del kernel, e le rese -vvv niente di interessante. Ovviamente posso farlo sull'host (con qualsiasi altra coppia di sottostrutture/nodi). Nel mio esempio sopra/htdocs/www è il punto di montaggio di un volume Docker, ma non sembra avere alcuna importanza, dato che non riesco a trovare mount --bind nessuna coppia di sottoalbero/nodo all'interno del contenitore.

+2

C'è un motivo per montare dall'interno del contenitore? Eseguire il contenitore con '-v /home/user/example.com/www:/htdocs/www' potrebbe essere una soluzione migliore, poiché è trasparente per il contenitore da cui provengono quei file, e non richiede il contenitore ulteriori privilegi – thaJeztah

+0

Buon punto. Tuttavia, questo mi costringe a ricreare il contenitore ogni volta che voglio aggiungere un nuovo utente e/o un altro sito a un utente esistente. Voglio essere in grado di farlo su un contenitore funzionante, senza doverlo interrompere. – Morpheu5

+0

non si dovrebbero mettere più siti in un contenitore; la rotazione di un contenitore richiede all'incirca 300 millisecondi. Avere solo un singolo sito in un contenitore, lo rende molto più pulito; hai solo ciò che è necessario per -that- sito, e (ad es.) non devi preoccuparti di possibili conflitti (site-a, site-b) – thaJeztah

risposta

12

Per utilizzare la chiamata di sistema mount, è necessaria la funzionalità CAP_SYS_ADMIN. Per impostazione predefinita, Docker elimina tutte le funzionalità quando si genera un contenitore (vale a dire che anche come root, non è consentito eseguire tutto). Vedere lo mount(2) man page per ulteriori informazioni.

Si può iniziare il vostro contenitore con la bandiera --cap-add=SYS_ADMIN per aggiungere questa funzionalità per il vostro contenitore:

[email protected] > docker run --rm -it --cap-add=SYS_ADMIN debian:jessie 
[email protected]:/# mkdir /mnt/test 
[email protected]:/# mount --bind /home /mnt/test/ 
[email protected]:/# 

Utilizzare questo con cautela. Non eseguire software non affidabile in un contenitore con privilegi.

+2

Prometto che starò molto attento :) Grazie. – Morpheu5