5

Io uso seguente comando per eseguire un contenitore finestra mobile, e mappare una directory da host (/root/database) al contenitore (/tmp/install/database):Perché il contenitore finestra mobile richiede "Autorizzazione negata"?

# docker run -it --name oracle_install -v /root/database:/tmp/install/database bofm/oracle12c:preinstall bash 

Ma in un contenitore, trovo che non posso usare ls di elencare i contenuti in /tmp/install/database/ anche se io sono root e hanno tutti i privilegi:

[[email protected] /]# cd /tmp/install/database/ 
[[email protected] database]# ls 
ls: cannot open directory .: Permission denied 
[[email protected] database]# id 
uid=0(root) gid=0(root) groups=0(root) 
[[email protected] database]# cd .. 
[[email protected] install]# ls -alt 
...... 
drwxr-xr-x. 7 root root 4096 Jul 7 2014 database 

I check /root/database in host, e tutte le cose sembrano OK:

[[email protected] ~]# ls -lt 
...... 
drwxr-xr-x. 7 root root  4096 Jul 7 2014 database 

Perché il contenitore finestra mobile richiede "Autorizzazione negata"?

Aggiornamento:
La causa principale è legata alla SELinux. In realtà, l'anno scorso ho incontrato lo stesso issue.

+2

Potrebbe provare aggiungendo '--privileged' al comando' docker run' e comunicarci se il permesso è ancora negato. Inoltre, potresti eseguire (sull'host) '# ls -lh/tmp/install/database' per favore? – Auzias

+0

@Auzias: Sì, aggiungi i lavori '--privileged'! Grazie! Potresti scrivere una risposta e spiegare qual è la differenza nell'usare questa opzione o meno mentre si lavora come utente root nel contenitore? –

+0

@Auzias: aggiorno in 'OP', per favore controlla, grazie! –

risposta

3

Un'autorizzazione negata all'interno di un contenitore per una directory condivisa potrebbe essere dovuta al fatto che questa directory condivisa è memorizzata su un dispositivo. Per impostazione predefinita, i contenitori non possono accedere a nessun dispositivo. L'aggiunta dell'opzione $docker run --privileged consente al contenitore di accedere a tutti i dispositivi ed eseguire chiamate Kernel. Questo non è considerato sicuro.

Un modo più semplice per condividere il dispositivo è utilizzare l'opzione docker run --device=/dev/sdb (se /dev/sdb è il dispositivo che si desidera condividere).

Dalla pagina man:

--device=[] 
     Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc:rwm) 

    --privileged=true|false 
     Give extended privileges to this container. The default is false. 

     By default, Docker containers are “unprivileged” (=false) and cannot, for example, run a Docker daemon inside the Docker container. This is because by default a container is not allowed to access any devices. A “privileged” container is given access to all devices. 

     When the operator executes docker run --privileged, Docker will enable access to all devices on the host as well as set some configuration in AppArmor to allow the container nearly all the same access to the host as processes running outside of a container on the host. 
+1

la causa principale è stata trovata: è causata da 'selinux'. In realtà, ho riscontrato un problema simile circa un anno fa: [Perché la finestra mobile richiede "Autorizzazione negata" quando si esegue il backup del volume di dati?] (Http: // StackOverflow.com/domande/30091681/why-fa-finestra mobile-pronta-permission-negato quando-back-up-the-data-volume). –

0

ho avuto un problema simile quando si condivide un punto di attivazione NFS come volume utilizzando finestra mobile-composizione. Sono stato in grado di risolvere il problema con:

docker-compose up --force-recreate 

Anche se hai riscontrato il problema, questo potrebbe aiutare qualcun altro.