Articles

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

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 dockerconcede privilegi equivalenti all’utente root. 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:

  1. Creare il gruppodocker.

    $ sudo groupadd docker

  2. Aggiungi il tuo utente al gruppo docker.

    $ sudo usermod -aG docker $USER

  3. 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 

  4. Verificare che sia possibile eseguiredockercomandi senza sudo.

    $ 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 gruppo docker, è 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

  5. Configura Docker per l’avvio all’avvio

    La maggior parte delle attuali distribuzioni Linux (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 andhigher) usasystemd 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 invecedisable.

    $ 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 registrazionejson-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.servicesystemd file di unità per le distribuzioni Linux usano systemd, come i recenti versioni dei RedHat, CentOS, Ubuntu e SLES, o con il daemon.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

    1. Utilizzare il comando sudo systemctl edit docker.serviceper aprire un file di override per docker.service in un editor di testo.

    2. Aggiungere o modificare le seguenti righe, sostituendo i propri valori.

      ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
    3. Salva il file.

    4. Ricarica la configurazione systemctl.

       $ sudo systemctl daemon-reload

  6. Riavvia la finestra mobile.

    $ sudo systemctl restart docker.service

  7. Verificare se la modifica è stata rispettata rivedendo l’output dinetstat per confermare che dockerd è 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

  1. hosts array /etc/docker/daemon.json per la connessione al socket UNIX e un indirizzo IP, come segue:

    { "hosts": }
  2. Riavviare Mobile.

  3. Verificare se la modifica è stata rispettata rivedendo l’output dinetstat 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 variabileDOCKER_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 il DOCKER_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 utilizzandosystemd-networkconsystemd 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’impostazione net.ipv4.conf.all.forwarding all’interno dei contenitori.

    Per aggirare questo problema su RHEL, CentOS o Fedora, modifica il file <interface>.networkin /usr/lib/systemd/network/ sul tuo host Docker(es: /usr/lib/systemd/network/80-container-host0.network) e aggiungi il seguente blocco all’interno del sezione.

    ...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 undnsmasq istanza in esecuzione su un indirizzo di loopback come 127.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 come 127.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.

    1. 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

    2. 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.

    3. Riavvia il demone Docker.

      $ sudo service docker restart

    4. Verificare che Docker possa risolvere gli indirizzi IP esterni tentando di estrarre animage:

      $ docker pull hello-world

    5. 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 disabilitarednsmasqin NetworkManager.

      1. Modifica il file/etc/NetworkManager/NetworkManager.conf.

      2. Commenta la riga dns=dnsmasqaggiungendo un carattere # all’inizio della riga.

        # dns=dnsmasq

        Salva e chiudi il file.

      3. 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:

      1. Disattivare il dnsmasq servizio:

        $ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq

      2. Configurare manualmente i server DNS utilizzando la documentazione Hat.

      3. 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 o 2375altrimenti.

        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: impostareDEFAULT_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.

          1. Accedere all’host Ubuntu o Debian come utente consudo privilegi.

          2. 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.

          3. 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