Procedura di post-installazione per Linux
Tempo di lettura stimato: 15 minuti
Questa sezione contiene procedure opzionali per configurare gli host Linux su workbetter con Docker.
- Gestisci Docker come utente non root
- Configura Docker per l’avvio all’avvio
- Utilizzare un motore di archiviazione diverso
- Configura il driver di registrazione predefinito
- Configura dove il demone Docker ascolta le connessioni
- Configurazione dell’accesso remoto con il file di unità systemd
- Configurazione dell’accesso remoto con il demone.json
- Abilita IPv6 sul demone Docker
- Risoluzione dei problemi
- Compatibilità del kernel
- Impossibile connettersi al demone Docker
- Problemi di inoltro IP
- Resolver DNS trovato in resolv.conf e contenitori non possono usarlo
- Specificare i server DNS per Docker
- Disable dnsmasq
- Ubuntu
- RHEL, CentOS o Fedora
- Consentire l’accesso alle API remote attraverso un firewall
- Il tuo kernel non supporta le funzionalità cgroup swap limit
Gestisci Docker come utente non root
Il demone Docker si lega a un socket Unix anziché a una porta TCP. Per impostazione predefinita, il socket Unix è di proprietà dell’utenteroot
e altri utenti possono accedervi solo utilizzandosudo
. Il demone Docker viene sempre eseguito come utenteroot
.
Se non si desidera precedere il comando docker
con sudo
, creare un Unixgroup chiamato docker
e aggiungere utenti ad esso. All’avvio del demone Docker, crea un socket Unix accessibile dai membri del gruppodocker
.
Avviso
Il gruppo
docker
concede privilegi equivalenti all’utenteroot
. Per i dettagli su come questo influisce sulla sicurezza nel sistema, seeDocker Daemon Attack Surface.
Nota:
Per eseguire Docker senza privilegi di root, vedere il demone Docker come utente non root (modalità Rootless).
Per creare il gruppodocker
e aggiungere il proprio utente:
-
Creare il gruppo
docker
.$ sudo groupadd docker
Aggiungi il tuo utente al gruppo
docker
.$ sudo usermod -aG docker $USER
Disconnettersi e accedere di nuovo in modo che l’appartenenza al gruppo viene rivalutata.
Se si esegue il test su una macchina virtuale, potrebbe essere necessario riavviare la macchina virtuale affinché le modifiche abbiano effetto.
In un ambiente Linux desktop come X Windows, disconnettersi completamente dalla sessione e quindi accedere nuovamente.
Su Linux, è anche possibile eseguire il seguente comando per attivare le modifiche ai gruppi:
$ newgrp docker
Verificare che sia possibile eseguire
docker
comandi senzasudo
.$ docker run hello-world
Questo comando scarica un’immagine di prova e la esegue in un contenitore. Quando thecontainer viene eseguito, stampa un messaggio informativo ed esce.
Se inizialmente si eseguivano comandi CLI Docker utilizzando
sudo
prima di aggiungere l’utente al gruppodocker
, è possibile che venga visualizzato il seguente errore,che indica che la directory~/.docker/
è stata creata con autorizzazioni erratesudo
comandi.
WARNING: Error loading config file: /home/user/.docker/config.json -stat /home/user/.docker/config.json: permission denied
Per risolvere questo problema, rimuovere la directory
~/.docker/
(viene ricreata automaticamente, ma vengono perse le impostazioni personalizzate) o modificarne la proprietà e le autorizzazioni utilizzando i seguenti comandi:$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R$ sudo chmod g+rwx "$HOME/.docker" -R
Configura Docker per l’avvio all’avvio
La maggior parte delle attuali distribuzioni Linux (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 andhigher) usa
systemd
per gestire quali servizi vengono avviati quando il sistemaavvia. Su Debian e Ubuntu, il servizio Docker è configurato per l’avvio al bootdi default. Per avviare automaticamente Docker e Containerd all’avvio per otherdistros, utilizzare i comandi seguenti:$ sudo systemctl enable docker.service$ sudo systemctl enable containerd.service
Per disabilitare questo comportamento, utilizzare invece
disable
.$ sudo systemctl disable docker.service$ sudo systemctl disable containerd.service
Se è necessario aggiungere un proxy HTTP, impostare una directory o partizione diversa per i file di runtime di Docker, o fare altre personalizzazioni, vedere personalizzare le opzioni del demone Docker di systemd.
Utilizzare un motore di archiviazione diverso
Per informazioni sui diversi motori di archiviazione, vedere i driver di archiviazione.Il motore di archiviazione predefinito e l’elenco dei motori di archiviazione supportati dipendono dalla distribuzione Linux del tuo host e dai driver del kernel disponibili.
Configura il driver di registrazione predefinito
Docker fornisce la capacità di raccogliere e visualizzare i dati di registro da tutti i contenitori in esecuzione su un host tramite una serie di driver di registrazione. Il driver di registrazione predefinito,
json-file
, scrive i dati di log in file formattati Json sul filesystem host. Nel tempo, questi file di log si espandonoin dimensioni, portando a un potenziale esaurimento delle risorse del disco.Per alleviare tali problemi, configurare il driver di registrazione
json-file
per abilitare la rotazione del registro, utilizzare driver di registrazione alternativi come il driver di registrazione “locale” che esegue la rotazione del registro per impostazione predefinita o utilizzare un driver di registrazione che invia i log a un aggregatore di registrazione remoto.Configura dove il demone Docker ascolta le connessioni
Per impostazione predefinita, il demone Docker ascolta le connessioni su un socket UNIX per accettare le richieste dai client locali. È possibile consentire a Docker di accettare richieste da host remoti configurandolo per l’ascolto su un indirizzo IP e una porta come il socket UNIX. Per informazioni più dettagliate su questa opzione di configurazioneprendi un’occhiata alla sezione “Collega Docker a un altro host / porta o un socket unix” dell’articolo di riferimento Docker CLI.
Proteggi la tua connessione
Prima di configurare Docker per accettare connessioni da host remoti, è di fondamentale importanza comprendere le implicazioni di sicurezza dell’apertura di docker alla rete. Se non vengono prese misure per proteggere la connessione, è possibile per gli utenti remoti non-root per ottenere l’accesso root sull’host. Per ulteriori informazioni su come utilizzare i certificati TLS per proteggere questa connessione, consultare questo articolo su come proteggere il socket Docker daemon.
la Configurazione di Mobile per accettare connessioni remote può essere fatto con il
docker.service
systemd file di unità per le distribuzioni Linux usano systemd, come i recenti versioni dei RedHat, CentOS, Ubuntu e SLES, o con ildaemon.json
file che isrecommended per le distribuzioni Linux che non usare systemd.systemd vs demone.json
La configurazione di Docker per l’ascolto delle connessioni utilizzando sia il file di unità
systemd
che il filedaemon.json
causa un conflitto che impedisce l’avvio di Docker.Configurazione dell’accesso remoto con il file di unità systemd
-
Utilizzare il comando
sudo systemctl edit docker.service
per aprire un file di override perdocker.service
in un editor di testo. -
Aggiungere o modificare le seguenti righe, sostituendo i propri valori.
ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
-
Salva il file.
-
Ricarica la configurazione
systemctl
.$ sudo systemctl daemon-reload
Riavvia la finestra mobile.
$ sudo systemctl restart docker.service
Verificare se la modifica è stata rispettata rivedendo l’output di
netstat
per confermare chedockerd
è in ascolto sulla porta configurata.$ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Configurazione dell’accesso remoto con il demone.json
-
hosts
array/etc/docker/daemon.json
per la connessione al socket UNIX e un indirizzo IP, come segue:{ "hosts": }
-
Riavviare Mobile.
-
Verificare se la modifica è stata rispettata rivedendo l’output di
netstat
per confermare chedockerd
è in ascolto sulla porta configurata.$ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Abilita IPv6 sul demone Docker
Per abilitare IPv6 sul demone Docker, vedere Abilitazione del supporto IPv6.
Risoluzione dei problemi
Compatibilità del kernel
Docker non può essere eseguito correttamente se il kernel è precedente alla versione 3.10 o se mancano alcuni moduli. Per verificare la compatibilità del kernel, è possibile scaricare eeseguire lo script
check-config.sh
.$ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh$ bash ./check-config.sh
Lo script funziona solo su Linux, non macOS.
Impossibile connettersi al demone Docker
Se viene visualizzato un errore come il seguente, il client Docker potrebbe essere configuredto connettersi a un demone Docker su un host diverso e tale host potrebbe non essere raggiungibile.
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
Per vedere a quale host il client è configurato per connettersi, controllare il valore della variabile
DOCKER_HOST
nel proprio ambiente.$ env | grep DOCKER_HOST
Se questo comando restituisce un valore, il client Docker è impostato per connettersi al demone aDocker in esecuzione su tale host. Se non è impostato, il client Docker è impostatoconnettersi al demone Docker in esecuzione sull’host locale. Se è impostata in errore,utilizzare il seguente comando annulla:
$ unset DOCKER_HOST
potrebbe essere necessario modificare il vostro ambiente di file, ad esempio
~/.bashrc
o~/.profile
per evitare che ilDOCKER_HOST
variabile da seterroneously.Se
DOCKER_HOST
è impostato come previsto, verificare che il demone Docker sia in esecuzione sull’host remoto e che un firewall o un’interruzione di rete non impediscano la connessione.Problemi di inoltro IP
Se si configura manualmente la rete utilizzando
systemd-network
consystemd
versione 219 o successiva, i contenitori Docker potrebbero non essere in grado di accedere alla rete.A partire dasystemd
versione 220, l’impostazione di inoltro per una determinata rete (net.ipv4.conf.<interface>.forwarding
) è impostata su off. Questa impostazione impedisce l’inoltro IP. Inoltre, è in conflitto con il comportamento di Docker di abilitare l’impostazionenet.ipv4.conf.all.forwarding
all’interno dei contenitori.Per aggirare questo problema su RHEL, CentOS o Fedora, modifica il file
<interface>.network
in/usr/lib/systemd/network/
sul tuo host Docker(es:/usr/lib/systemd/network/80-container-host0.network
) e aggiungi il seguente blocco all’interno delsezione.
...IPForward=kernel# ORIPForward=true
Questa configurazione consente l’inoltro IP dal contenitore come previsto.
Resolver DNS trovato in resolv.conf e contenitori non possono usarlo
Linux, che utilizza una GUI hanno spesso un manager di rete in esecuzione, che utilizza un
dnsmasq
istanza in esecuzione su un indirizzo di loopback come127.0.0.1
o127.0.1.1
per memorizzare nella cache le richieste DNS, e aggiunge a questa voce/etc/resolv.conf
. Il serviziodnsmasq
velocizza le ricerche di UPDNS e fornisce anche servizi DHCP. Questa configurazione non funziona all’interno di un contenitore Docker che ha il proprio spazio dei nomi di rete, perchéil contenitore Docker risolve gli indirizzi di loopback come127.0.0.1
toitself, ed è molto improbabile che stia eseguendo un server DNS sul proprio indirizzo di loopback.Se Docker rileva che nessun server DNS a cui si fa riferimento in
/etc/resolv.conf
è un server DNS completamente funzionante, si verifica il seguente avviso e Docker utilizza i server publicDNS forniti da Google in8.8.8.8
e8.8.4.4
per la risoluzione DNS.WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containerscan't use it. Using default external servers :
Se vedi questo avviso, controlla prima se usi
dnsmasq
:$ ps aux |grep dnsmasq
Se il tuo contenitore ha bisogno di risolvere host interni al tuo rete, i nameserver pubblici non sono adeguati. Hai due opzioni:
- Puoi specificare un server DNS da usare per Docker, oppure
- Puoi disabilitare
dnsmasq
in NetworkManager. Se lo fai, NetworkManageradds il tuo vero server dei nomi DNS su/etc/resolv.conf
, ma perdi i possibili vantaggi didnsmasq
.
È sufficiente utilizzare uno di questi metodi.
Specificare i server DNS per Docker
La posizione predefinita del file di configurazione è
/etc/docker/daemon.json
. È possibile modificare la posizione del file di configurazione utilizzando il flag del demone--config-file
. La documentazione seguente presuppone che il file di configurazione si trovi in/etc/docker/daemon.json
.-
Crea o modifica il file di configurazione del demone Docker, il cui valore predefinito è
/etc/docker/daemon.json
, che controlla la configurazione del demone Docker.$ sudo nano /etc/docker/daemon.json
Aggiungere una chiave
dns
con uno o più indirizzi IP come valori. Se il file ha contenuti esistenti, è sufficiente aggiungere o modificare la rigadns
.{ "dns": }
Se il server DNS interno non può risolvere gli indirizzi IP pubblici, includere almeno un server DNS che può, in modo da poter connettersi a Docker Hub e sothat i contenitori possono risolvere i nomi di dominio Internet.
Salva e chiudi il file.
Riavvia il demone Docker.
$ sudo service docker restart
Verificare che Docker possa risolvere gli indirizzi IP esterni tentando di estrarre animage:
$ docker pull hello-world
Se necessario, verificare che i contenitori Docker possano risolvere un hostname interno eseguendone il ping.
Disable
dnsmasq
Ubuntu
Se si preferisce non modificare la configurazione del demone Docker per utilizzare un indirizzo specificIP, seguire queste istruzioni per disabilitare
dnsmasq
in NetworkManager.-
Modifica il file
/etc/NetworkManager/NetworkManager.conf
. -
Commenta la riga
dns=dnsmasq
aggiungendo un carattere#
all’inizio della riga.# dns=dnsmasq
Salva e chiudi il file.
-
Riavvia sia NetworkManager che Docker. In alternativa, puoi riavviareil tuo sistema.
$ sudo restart network-manager$ sudo restart docker
RHEL, CentOS o Fedora
Per disattivare
dnsmasq
su RHEL, CentOS o Fedora:-
Disattivare il
dnsmasq
servizio:$ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
Configurare manualmente i server DNS utilizzando la documentazione Hat.
Consentire l’accesso alle API remote attraverso un firewall
Se si esegue un firewall sullo stesso host, come si esegue la finestra Mobile e si desidera accessthe Mobile Remote API da un altro host e accesso remoto è abilitato, è necessario configurare il firewall per consentire le connessioni in entrata sulla finestra Mobile porta,che di default è
2376
se TLS transport è attivato o2375
altrimenti.Due comuni demoni firewall sono UFW (Firewall semplice) (spesso utilizzato per sistemi Ubuntu) e firewalld (spesso utilizzato per sistemi basati su RPM). Consultare la documentazione per il sistema operativo e il firewall, male seguenti informazioni potrebbero aiutarti a iniziare. Queste opzioni sono fairlypermissive e si consiglia di utilizzare una configurazione diversa che blocca yoursystem giù più.
-
UFW: impostare
DEFAULT_FORWARD_POLICY="ACCEPT"
nella configurazione. -
firewalld: aggiungi regole simili alle seguenti alla tua politica (una per le richieste in entrata e una per le richieste in uscita). Assicurati che i nomi dell’interfacciae i nomi delle catene siano corretti.
<direct> </direct>
Il tuo kernel non supporta le funzionalità cgroup swap limit
Su host Ubuntu o Debian, potresti vedere messaggi simili ai seguenti quando lavori con un’immagine.
WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
Questo avviso non si verifica su sistemi basati su RPM, che abilitano queste capacità per impostazione predefinita.
Se non hai bisogno di queste funzionalità, puoi ignorare l’avviso. È possibile abilitare queste funzionalità su Ubuntu o Debian seguendo queste istruzioni. La contabilità Memoryand swap comporta un overhead di circa l ‘ 1% della memoria totale disponibile e un degrado delle prestazioni complessive del 10%, anche se Docker non è in esecuzione.
-
Accedere all’host Ubuntu o Debian come utente con
sudo
privilegi. -
Modifica il file
/etc/default/grub
. Aggiungere o modificare la lineaGRUB_CMDLINE_LINUX
per aggiungere le seguenti due coppie chiave-valore:GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Salvare e chiudere il file.
-
Aggiorna GRUB.
$ sudo update-grub
Se il file di configurazione di GRUB ha una sintassi errata, si verifica un errore occurs.In in questo caso, ripetere i passaggi 2 e 3.
Le modifiche hanno effetto quando il sistema viene riavviato.
- Dai un’occhiata ai moduli di formazione Get started per imparare come costruire un’immagine ed eseguirla come applicazione containerizzata.
- Rivedere gli argomenti in Sviluppare con Docker per imparare a costruire nuove applicazioni utilizzando Docker.
Docker, Docker documentazione, requisiti, apt, installazione, ubuntu, installare, disinstallare, aggiornare, aggiornare
-