Pași Post-instalare Pentru Linux
timp estimat de citire: 15 minute
această secțiune conține proceduri opționale pentru configurarea gazdelor Linux pentru a lucra mai bine cu Docker.
- gestionați Docker ca utilizator non-root
- configurați Docker pentru a porni la pornire
- utilizați un alt motor de stocare
- configurează driverul de logare implicit
- configurați unde demonul Docker ascultă conexiunile
- Configurarea accesului la distanță cu fișierul unității systemd
- Configurarea accesului la distanță cu daemon.JSON
- activați IPv6 pe demonul Docker
- depanarea
- Compatibilitatea nucleului
- nu se poate conecta la demonul Docker
- probleme de redirecționare IP
- resolver DNS găsit în resolv.conf și containerele nu o pot folosi
- specificați serverele DNS pentru Docker
- Disable dnsmasq
- Ubuntu
- RHEL, CentOS, sau Fedora
- permiteți accesul la API-ul de la distanță printr-un firewall
- nucleul dvs. nu acceptă capacitățile limită de swap cgroup
gestionați Docker ca utilizator non-root
demonul Docker se leagă la un soclu Unix în loc de un port TCP. Implicit, soclul Unix este deținut de utilizator root
și alți utilizatori îl pot accesa doarutilizândsudo
. Demonul Docker rulează întotdeauna ca utilizatorroot
.
dacă nu doriți să prefațați comandadocker
cusudo
, creați un grup Unix numitdocker
și adăugați utilizatori la acesta. Când demonul Docker pornește, acestacreează un soclu Unix accesibil membrilor grupului docker
.
avertisment
docker
grupul acordă privilegii echivalente curoot
utilizator. Pentru detalii cu privire la modul în care acest impact de securitate în sistemul dvs., seeDocker Daemon Attack Surface.
notă:
pentru a rula Docker fără privilegii de root, seeRun demonul Docker ca un utilizator non-root (modul Rootless).
pentru a crea grupuldocker
și adăugați utilizatorul:
-
creați grupul
docker
.$ sudo groupadd docker
-
adăugați utilizatorul la
docker
grup.$ sudo usermod -aG docker $USER
-
Deconectați-vă și conectați-vă din nou, astfel încât membrii grupului dvs. să fie reevaluați.
dacă testați pe o mașină virtuală, poate fi necesar să reporniți mașina virtuală pentru ca modificările să aibă efect.
pe un mediu desktop Linux, cum ar fi X Windows, deconectați-vă complet de la sesiune și apoi conectați-vă din nou.
pe Linux, puteți rula, de asemenea, următoarea comandă pentru a activa modificările la grupuri:
$ newgrp docker
-
verificați dacă puteți rula
docker
comenzi fărăsudo
.$ docker run hello-world
această comandă descarcă o imagine de test și o rulează într-un container. Când rulează containerul, acesta imprimă un mesaj informativ și iese.
dacă ați rulat inițial comenzi Docker CLI folosind
sudo
înainte de a adăuga utilizatorul dvs. la grupuldocker
, este posibil să vedeți următoarea eroare,ceea ce indică faptul că directorul~/.docker/
a fost creat cu permisiuni incorecte datorităsudo
comenzi.WARNING: Error loading config file: /home/user/.docker/config.json -stat /home/user/.docker/config.json: permission denied
pentru a remedia această problemă, fie eliminați directorul
~/.docker/
(este recreat automat, dar orice setări personalizatesunt pierdute), fie schimbați proprietatea și permisiunile utilizând următoarele comenzi:$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R$ sudo chmod g+rwx "$HOME/.docker" -R
configurați Docker pentru a porni la pornire
cele mai actuale distribuții Linux (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 andhigher) utilizați systemd
pentru a gestiona ce servicii încep când sistemulboots. Pe Debian și Ubuntu, serviciul Docker este configurat să pornească la bootîn mod implicit. Pentru a porni automat Docker și Containerd la boot pentru altedistros, utilizați comenzile de mai jos:
$ sudo systemctl enable docker.service$ sudo systemctl enable containerd.service
pentru a dezactiva acest comportament, utilizați disable
în schimb.
$ sudo systemctl disable docker.service$ sudo systemctl disable containerd.service
dacă trebuie să adăugați un Proxy HTTP, setați un alt director sau partiție pentru fișierele runtime de blocare sau faceți alte personalizări, vedețipersonalizați opțiunile daemonului systemd Docker.
utilizați un alt motor de stocare
pentru informații despre diferitele motoare de stocare, consultați driverele de stocare.Motorul de stocare implicit și lista motoarelor de stocare acceptate depind dedistribuția Linux a gazdei dvs. și driverele de kernel disponibile.
configurează driverul de logare implicit
Docker oferă capacitatea de a colecta și vizualiza datele de jurnal din toate containerele care rulează pe o gazdă printr-o serie de drivere de logare. Driverul de logare implicit, json-file
, scrie datele de logfișiere formatate JSON pe sistemul de fișiere gazdă. În timp, aceste fișiere jurnal se extindîn dimensiune, ceea ce duce la epuizarea potențială a resurselor de disc.
pentru a atenua astfel de probleme, fie configurațijson-file
driverul de logare pentru a activa rotația jurnalului, utilizați driverul de logare analternativ, cum ar fi driverul de logare „local” care efectuează rotația jurnalului în mod implicit, fie utilizați un driver de logare care trimite jurnalele către un agregator de logare la distanță.
configurați unde demonul Docker ascultă conexiunile
în mod implicit, demonul Docker ascultă conexiunile pe un soclu UNIX pentru a acceptacereri de la clienți locali. Este posibil să se permită Docker să accepte requestsfrom gazde la distanță prin configurarea-l pentru a asculta pe o adresă IP și port, precum și socket UNIX. Pentru informații mai detaliate despre această opțiune de configurareaveți o privire la secțiunea” legați Docker la o altă gazdă / port sau un soclu unix” dinarticolul de referință Docker CLI.
asigurați-vă conexiunea
înainte de a configura Docker să accepte conexiuni de la gazde la distanță, este extrem de important să înțelegeți implicațiile de securitate ale deschiderii docker în rețea. Dacă nu se iau măsuri pentru a asigura conexiunea, este posibil ca utilizatorii non-root de la distanță să obțină acces root pe gazdă. Pentru mai multe informații despre cum să utilizați certificatele TLS pentru a securiza această conexiune, consultați acest articol despre cum să protejați soclul daemon Docker.
Configurarea Docker pentru a accepta conexiuni la distanță se poate face cu docker.service
fișier unitate systemd pentru distribuții Linux folosind systemd, cum ar fi versiunile recente de RedHat, CentOS, Ubuntu și SLES, sau cu daemon.json
fișier care esterecomandat Pentru Linux distribuții care nu utilizează systemd.
systemd vs daemon.JSON
Configurarea Docker pentru a asculta conexiuni folosind atât
systemd
fișier unitate șidaemon.json
fișier provoacă un conflict care împiedică Docker de pornire.
Configurarea accesului la distanță cu fișierul unității systemd
-
utilizați comanda
sudo systemctl edit docker.service
pentru a deschide un fișier de suprascriere pentrudocker.service
într-un editor de text. -
adăugați sau modificați următoarele linii, înlocuind propriile valori.
ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
-
salvați fișierul.
-
Reîncărcați configurația
systemctl
.$ sudo systemctl daemon-reload
-
Restart Docker.
$ sudo systemctl restart docker.service
-
verificați dacă modificarea a fost onorată prin revizuirea ieșirii
netstat
pentru a confirmadockerd
ascultă pe portul configurat.$ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Configurarea accesului la distanță cu daemon.JSON
-
setați
hosts
matrice în/etc/docker/daemon.json
pentru a conecta la socket UNIX și o adresă IP, după cum urmează:{ "hosts": }
-
reporniți Docker.
-
verificați dacă modificarea a fost onorată prin revizuirea ieșirii
netstat
pentru a confirmadockerd
ascultă pe portul configurat.$ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
activați IPv6 pe demonul Docker
pentru a activa IPv6 pe demonul Docker, consultați suport IPv6 activat.
depanarea
Compatibilitatea nucleului
Docker nu poate rula corect dacă nucleul dvs. este mai vechi decât versiunea 3.10 sau dacă lipsesc unele module. Pentru a verifica compatibilitatea kernel-ului, puteți descărca șirulați scriptul check-config.sh
.
$ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh$ bash ./check-config.sh
scriptul funcționează numai pe Linux, nu pe macOS.
nu se poate conecta la demonul Docker
Dacă vedeți o eroare, cum ar fi următoarele, Clientul Docker poate fi configuratpentru a se conecta la un demon Docker pe o altă gazdă, și că gazda nu poate fi accesibil.
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
pentru a vedea la ce gazdă este configurat clientul dvs. să se conecteze, verificați valoarea variabilei DOCKER_HOST
din mediul dvs.
$ env | grep DOCKER_HOST
dacă această comandă returnează o valoare, Clientul Docker este setat să se conecteze la daemonul aDocker care rulează pe acea gazdă. Dacă este dezactivat, Clientul Docker este setat laconectați-vă la demonul Docker care rulează pe gazda locală. Dacă este setat în eroare,utilizați următoarea comandă pentru a dezactiva:
$ unset DOCKER_HOST
poate fi necesar să editați mediul în fișiere precum ~/.bashrc
sau~/.profile
pentru a preveni DOCKER_HOST
variabilă de la a fi seterroneously.
dacăDOCKER_HOST
este setat conform destinației, verificați dacă demonul Docker rulează pe gazda de la distanță și dacă un firewall sau o întrerupere a rețelei nu vă împiedică să vă conectați.
probleme de redirecționare IP
dacă configurați manual rețeaua utilizândsystemd-network
cusystemd
versiunea 219 sau o versiune ulterioară, este posibil ca containerele Docker să nu vă poată accesa rețeaua.Începând cu systemd
versiunea 220, setarea de redirecționare pentru o anumită rețea(net.ipv4.conf.<interface>.forwarding
) este implicit dezactivată. Această setareprevine redirecționarea IP. De asemenea, intră în conflict cu comportamentul lui Docker de a activa setarea net.ipv4.conf.all.forwarding
în containere.
pentru a rezolva acest lucru pe RHEL, CentOS sau Fedora, editați fișierul <interface>.network
în /usr/lib/systemd/network/
pe gazda Docker(ex: /usr/lib/systemd/network/80-container-host0.network
) și adăugați blocul următor în secțiune.
...IPForward=kernel# ORIPForward=true
această configurație permite redirecționarea IP din container conform așteptărilor.
resolver DNS găsit în resolv.conf și containerele nu o pot folosi
sistemele Linux care utilizează o interfață grafică au adesea un manager de rețea care rulează, care utilizează o instanțădnsmasq
care rulează pe o adresă de loopback, cum ar fi 127.0.0.1
sau127.0.1.1
pentru a cache cererile DNS și adaugă această intrare/etc/resolv.conf
. Serviciuldnsmasq
accelerează căutările upDNS și oferă, de asemenea, servicii DHCP. Această configurație nu funcționează într-un container Docker care are propriul spațiu de nume de rețea, deoarece containerul Docker rezolvă adrese de loopback, cum ar fi 127.0.0.1
și este foarte puțin probabil să ruleze un server DNS pe cont propriuadresa loopback.
dacă Docker detectează că niciun server DNS la care se face referire în/etc/resolv.conf
nu este un server DNS complet funcțional, apare următorul avertisment și Docker folosește serverele publicDNS furnizate de Google la8.8.8.8
și8.8.4.4
pentru rezoluția DNS.
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containerscan't use it. Using default external servers :
dacă vedeți acest avertisment, verificați mai întâi dacă utilizați dnsmasq
:
$ ps aux |grep dnsmasq
dacă containerul dvs. trebuie să rezolve gazdele care sunt rețea, serverele de nume publice nu sunt adecvate. Aveți două opțiuni:
- puteți specifica un server DNS pentru Docker de utilizat sau
- puteți dezactiva
dnsmasq
în NetworkManager. Dacă faceți acest lucru, NetworkManageradds adevărat DNS nameserver la/etc/resolv.conf
, dar pierzi theposibile beneficii alednsmasq
.
trebuie doar să utilizați una dintre aceste metode.
specificați serverele DNS pentru Docker
locația implicită a fișierului de configurare este/etc/docker/daemon.json
. Youpoate schimba locația fișierului de configurare folosind--config-file
Pavilion daemon. Documentația de mai jos presupune că fișierul de configurare este localizatla /etc/docker/daemon.json
.
-
creați sau editați fișierul de configurare Docker daemon, care implicit la
/etc/docker/daemon.json
fișier, care controlează Docker daemonconfiguration.$ sudo nano /etc/docker/daemon.json
-
adăugați o
dns
cheie cu una sau mai multe adrese IP ca valori. Dacă fișierul areconținutul existent, trebuie doar să adăugați sau să editați liniadns
.{ "dns": }
dacă serverul DNS intern nu poate rezolva adresele IP publice, includeți cel puțin un server DNS care poate, astfel încât să vă puteți conecta la Docker Hub și astfel containerele dvs. pot rezolva numele de domenii internet.
Salvați și închideți fișierul.
-
reporniți demonul Docker.
$ sudo service docker restart
-
verificați dacă Docker poate rezolva adrese IP externe prin încercarea de a trage animage:
$ docker pull hello-world
-
dacă este necesar, verificați dacă containerele Docker pot rezolva un nume de gazdă intern prin ping.
$ docker run --rm -it alpine ping -c4 <my_internal_host>PING google.com (192.168.1.2): 56 data bytes64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms
Disable dnsmasq
Ubuntu
dacă preferați să nu modificați configurația daemonului Docker pentru a utiliza o anumită adresă IP, urmați aceste instrucțiuni pentru a dezactiva dnsmasq
în NetworkManager.
-
editați fișierul
/etc/NetworkManager/NetworkManager.conf
. -
comentați linia
dns=dnsmasq
adăugând un caracter#
la începutul liniei.# dns=dnsmasq
Salvați și închideți fișierul.
-
reporniți atât NetworkManager, cât și Docker. Ca alternativă, puteți repornisistemul dvs.
$ sudo restart network-manager$ sudo restart docker
RHEL, CentOS, sau Fedora
pentru a dezactiva dnsmasq
pe RHEL, CentOS, sau Fedora:
-
dezactiva
dnsmasq
serviciu:$ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
-
configurați serverele DNS manual utilizând documentația de înregistrare.
permiteți accesul la API-ul de la distanță printr-un firewall
dacă rulați un firewall pe aceeași gazdă pe care o executați Docker și doriți să accesați API-ul de la distanță Docker de la o altă gazdă și accesul de la distanță este activat, aveți nevoiepentru a configura firewall-ul pentru a permite conexiunile primite pe portul Docker,care implicit este 2376
dacă transportul criptat TLS este activat sau 2375
în caz contrar.
două daemon firewall comune suntufw (Firewall necomplicat) (adeseori folosit pentru sistemele Ubuntu) și firewalld (adesea folosit pentru sistemele bazate pe RPM). Consultați documentația pentru sistemul de operare și paravanul de protecție, darurmătoarele informații vă pot ajuta să începeți. Aceste opțiuni sunt fairlypermissive și poate doriți să utilizați o configurație diferită care blochează yoursystem jos mai mult.
-
UFW: setați
DEFAULT_FORWARD_POLICY="ACCEPT"
în configurația dvs. -
firewalld: adăugați reguli similare cu următoarele la politica dvs. (una pentru cererile primite și una pentru cererile trimise). Asigurați-vă că numele interfeței și numele lanțului sunt corecte.
<direct> </direct>
nucleul dvs. nu acceptă capacitățile limită de swap cgroup
pe gazdele Ubuntu sau Debian, este posibil să vedeți mesaje similare cu următoarele când lucrați cu o imagine.
WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
acest avertisment nu apare pe sistemele bazate pe RPM, care permit implicit aceste capacități.
dacă nu aveți nevoie de aceste capacități, puteți ignora avertismentul. Puteți activa aceste capabilități pe Ubuntu sau Debian urmând aceste instrucțiuni. Memoryand swap accounting suportă o regie de aproximativ 1% din totalul memoriei disponibile și o degradare generală a performanței de 10%, chiar dacă Docker nu rulează.
-
Conectați-vă la gazda Ubuntu sau Debian ca utilizator cu
sudo
privilegii. -
editați fișierul
/etc/default/grub
. Adăugați sau editați liniaGRUB_CMDLINE_LINUX
pentru a adăuga următoarele două perechi cheie-valoare:GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Salvați și închideți fișierul.
-
actualizare GRUB.
$ sudo update-grub
Dacă fișierul de configurare GRUB are o sintaxă incorectă, o eroare occurs.In în acest caz, repetați pașii 2 și 3.
modificările intră în vigoare atunci când sistemul este repornit.
- aruncați o privire la modulele de instruire Get started pentru a afla cum să construiți o imagine și să o rulați ca aplicație containerizată.
- examinați subiectele din dezvoltarea cu Docker pentru a afla cum să construiți noi aplicații folosind Docker.
Docker, Docker documentație, cerințe, apt, instalare, ubuntu, instala, dezinstala, upgrade, actualizare