Articles

Etter installasjonstrinn For Linux

Estimert lesetid: 15 minutter

denne delen inneholder valgfrie prosedyrer for å konfigurere Linux-verter til workbetter med Docker.

Administrer Docker som en ikke-rotbruker

Docker-demonen binder seg til En Unix-kontakt i stedet for EN TCP-port. Ved standardat Unix socket eies av brukeren root og andre brukere kan bare få tilgang itusing sudo. Docker-demonen kjører alltid somroot bruker.

hvis du ikke vil forord docker kommandoen med sudo, opprett En Unixgroup kalt docker og legg til brukere i den. Når Docker-demonen starter, detskaper En Unix-kontakt tilgjengelig av medlemmer avdocker – gruppen.

Advarsel

docker gruppen gir rettigheter tilsvarenderootbruker. For detaljer om hvordan dette påvirker sikkerheten i systemet ditt, seeDocker Daemon Attack Surface.

Merk:

for å kjøre Docker uten rotrettigheter, seeRun Docker-demonen som en ikke-rotbruker (Rotløs modus).

for å opprette docker gruppen og legg til brukeren din:

  1. Opprett docker gruppen.

    $ sudo groupadd docker
  2. Legg til brukeren i docker gruppen.

    $ sudo usermod -aG docker $USER
  3. Logg ut og logg inn igjen slik at gruppemedlemskapet ditt blir revurdert.

    hvis testing på en virtuell maskin, kan det være nødvendig å starte den virtuelle maskinen på nytt for at endringene skal tre i kraft.

    på En desktop Linux miljø Som X Windows, logg ut av økten helt og deretter logge på igjen.

    På Linux kan du også kjøre følgende kommando for å aktivere endringene i grupper:

    $ newgrp docker 
  4. Kontroller at du kan kjøre dockerkommandoer uten sudo.

    $ docker run hello-world

    denne kommandoen laster ned et testbilde og kjører det i en beholder. Når beholderen kjører, skriver den ut en informasjonsmelding og utganger.

    hvis Du i utgangspunktet kjørte Docker cli-kommandoer ved hjelp av sudo før du legger til brukeren i docker – gruppen, kan du se følgende feil,som indikerer at ~/.docker/ – katalogen ble opprettet medfeil tillatelser på grunn av sudo kommandoer.

    WARNING: Error loading config file: /home/user/.docker/config.json -stat /home/user/.docker/config.json: permission denied

    for å løse dette problemet må du enten fjerne~/.docker/ katalogen(den gjenopprettes automatisk, men eventuelle tilpassede innstillingerer tapt), eller endre eierskap og tillatelser ved hjelp av følgende kommandoer:

    $ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R$ sudo chmod g+rwx "$HOME/.docker" -R

Konfigurer Docker for å starte ved oppstart

De fleste Aktuelle Linux-distribusjoner (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 oghøyere) bruksystemdfor å administrere hvilke tjenester start når systemetstarter. På Debian og Ubuntu er Docker-tjenesten konfigurert til å starte ved oppstart som standard. For å starte Docker og Containerd automatisk ved oppstart for andre, bruk kommandoene nedenfor:

$ sudo systemctl enable docker.service$ sudo systemctl enable containerd.service

for å deaktivere denne oppførselen, brukdisablei stedet.

$ sudo systemctl disable docker.service$ sudo systemctl disable containerd.service

hvis du trenger å legge TIL EN HTTP Proxy, angi en annen katalog eller partisjon for theDocker runtime filer, eller gjøre andre tilpasninger, setilpasse systemd Docker daemon alternativer.

Bruk en annen lagringsmotor

for informasjon om de forskjellige lagringsmotorene, se lagring drivere.Standard lagringsmotor og listen over støttede lagringsmotorer avhenger av vertens Linux-distribusjon og tilgjengelige kjernedrivere.

Konfigurer standard logging driver

Docker gir muligheten til å samle inn og vise loggdata fra alle beholdere som kjører på en vert via en serie oflogging drivere. Standard logging driver,json-file, skriver loggdata toJSON-formaterte filer på vertsfilsystemet. Over tid utvider disse loggfilene segi størrelse, noe som fører til potensiell utmattelse av diskressurser.

for å avhjelpe slike problemer, enten konfigurere json-file logging driver toenable log rotasjon, bruk analternative logging driversom «lokal» logging driversom utfører logg rotasjon som standard, eller bruke en logging driver som sendslogs til en ekstern logging aggregator.

Konfigurer Hvor Docker-demonen lytter etter tilkoblinger

Som standard lytter Docker-demonen etter tilkoblinger på EN UNIX-kontakt for å akseptereforespørsler fra lokale klienter. Det er mulig å tillate Docker å godta forespørsler fra eksterne verter ved å konfigurere den til å lytte på EN IP-adresse og port ogsåsom UNIX-kontakten. For mer detaljert informasjon om dette konfigurasjonsalternativetta en titt på» Bind Docker til en annen vert/port eller en unix-kontakt » – delen av Docker Cli-Referanseartikkelen.

Sikre tilkoblingen

Før Du konfigurerer Docker for å godta tilkoblinger fra eksterne verter, er det kritisk viktig at duforstå sikkerhetsimplikasjonene ved å åpne docker til nettverket. Hvis det ikke tas skritt for å sikre tilkoblingen, er det mulig for eksterne ikke-rotbrukere å få root-tilgang på verten. Hvis du vil ha mer informasjon om hvordan DU bruker tls-sertifikater for å sikre denne tilkoblingen, kan du se denne artikkelen om hvordan du beskytter Docker daemon-kontakten.

Konfigurere Docker for å godta eksterne tilkoblinger kan gjøres med docker.servicesystemd-enhetsfil for Linux-distribusjoner ved hjelp av systemd, for eksempel nyere versjoner Av RedHat, CentOS, Ubuntu og SLES, eller med daemon.json fil som isrecommended for linux-distribusjoner som ikke bruker systemd.

systemd vs daemon.Json

Konfigurere Docker til å lytte etter tilkoblinger ved hjelp av både systemd unit-filen ogdaemon.json – filen forårsaker en konflikt som hindrer Docker i å starte.

Konfigurere ekstern tilgang med systemd-enhetsfil

  1. Bruk kommandoensudo systemctl edit docker.service for å åpne en overstyringsfil fordocker.service i et tekstredigeringsprogram.

  2. Legg til eller endre følgende linjer, erstatte dine egne verdier.

    ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
  3. Lagre filen.

  4. Last inn systemctl konfigurasjon.

     $ sudo systemctl daemon-reload
  5. Start Docker På Nytt.

    $ sudo systemctl restart docker.service
  6. Kontroller om endringen ble innfridd ved å se gjennom utdataene til netstat for å bekrefte dockerd lytter på den konfigurerte porten.

    $ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd

Konfigurere ekstern tilgang med demon.Json

  1. Sett hosts matrisen i /etc/docker/daemon.json for å koble TIL UNIX-kontakten og EN IP-adresse, som følger:

    { "hosts": }
  2. start docker på nytt.

  3. Kontroller om endringen ble innfridd ved å se på utdataene for netstat for å bekreftedockerd lytter på den konfigurerte porten.

    $ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd

Aktiver IPv6 på Docker-demonen

for å aktivere IPv6 på Docker-demonen, seenable IPv6-støtte.

Feilsøking

kernel compatibility

Docker kan ikke kjøre riktig hvis kjernen er eldre enn versjon 3.10 eller hvis det mangler noen moduler. For å sjekke kjernekompatibilitet kan du laste ned ogkjør skriptetcheck-config.sh.

$ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh$ bash ./check-config.sh

skriptet fungerer bare På Linux, ikke macOS.

kan ikke koble Til Docker-demonen

hvis du ser en feil som følgende, Kan Docker-klienten konfigureres for å koble til En Docker-demonen på en annen vert, og den verten kan ikke bereachable.

Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?

for å se hvilken vert klienten er konfigurert til å koble til, sjekk verdien oftheDOCKER_HOST variabelen i ditt miljø.

$ env | grep DOCKER_HOST

Hvis Denne kommandoen returnerer en verdi, Er Docker-klienten satt til å koble til aDocker-demonen som kjører på den verten. Hvis Den ikke er angitt, Er Docker-klienten satt tilkoble Til Docker-demonen som kjører på den lokale verten. Hvis det er satt i feil,bruk følgende kommando for å fjerne den:

$ unset DOCKER_HOST

Du må kanskje redigere miljøet i filer som~/.bashrceller~/.profilefor å forhindreDOCKER_HOSTvariabel fra å være seterroneously.

Hvis DOCKER_HOST er angitt som beregnet, må Du kontrollere At Docker-demonen kjørerpå den eksterne verten, og at en brannmur eller nettverksbrudd ikke hindrer deg fra å koble til.

problemer MED ip-videresending

hvis du konfigurerer nettverket manuelt ved hjelp avsystemd-network medsystemdversjon 219 eller nyere, Kan Det hende At Docker-beholdere ikke får tilgang til nettverket.Begynner med systemd versjon 220, videresendingsinnstillingen for et gitt nettverk(net.ipv4.conf.<interface>.forwarding) som standard til av. Denne innstillingenhindrer IP-videresending. Det er også i konflikt Med Dockers oppførsel for å aktiverenet.ipv4.conf.all.forwarding innstilling i containere.

for å omgå DETTE PÅ RHEL, CentOS eller Fedora, rediger <interface>.networkfilen i /usr/lib/systemd/network/ På Docker-verten din(ex: /usr/lib/systemd/network/80-container-host0.network) og legg til følgende blokk i Seksjon.

...IPForward=kernel# ORIPForward=true

denne konfigurasjonen tillater IP-videresending fra beholderen som forventet.

DNS resolver funnet i resolv.Conf og containere kan ikke bruke Det

Linux-systemer som bruker EN GUI, har ofte en nettverksadministrator som kjører, som bruker ENdnsmasq forekomst som kjører på en tilbakekoblingsadresse som 127.0.0.1 eller127.0.1.1 for å cache DNS-forespørsler, og legger til denne oppføringen til/etc/resolv.confdnsmasq tjenesten hastigheter upDNS oppslag og gir OGSÅ DHCP-tjenester. Denne konfigurasjonen virker ikke i En Docker-beholder som har sitt eget nettverksnavnerom, fordidocker-beholderen løser loopback-adresser som 127.0.0.1 toitself, og det er svært lite sannsynlig å kjøre EN DNS-server på sin egenloopback-adresse.

Hvis Docker oppdager at INGEN DNS-server referert i /etc/resolv.confer en fullt fungerende DNS-server, oppstår følgende advarsel Og Docker bruker publicDNS-serverne levert Av Google på 8.8.8.8og 8.8.4.4 for DNS-oppløsning.

WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containerscan't use it. Using default external servers : 

hvis du ser denne advarselen, må du først sjekke om du bruker dnsmasq:

$ ps aux |grep dnsmasq

hvis beholderen din trenger å løse verter som er interne for din nettverk, de offentlige navneserverne er ikke tilstrekkelige. Du har to valg:

  • Du kan angi EN DNS-server For Docker å bruke, eller
  • du kan deaktivere dnsmasq I NetworkManager. Hvis Du gjør Dette, NetworkManageradds din sanne DNS-navneserver til /etc/resolv.conf, men du mister de mulige fordelene med dnsmasq.

du trenger bare å bruke en av disse metodene.

Angi DNS-servere for Docker

standardplasseringen for konfigurasjonsfilen er /etc/docker/daemon.json. Du kan endre plasseringen av konfigurasjonsfilen ved hjelp av--config-filedaemon-flagget. Dokumentasjonen nedenfor forutsetter at konfigurasjonsfilen er lokalisertpå /etc/docker/daemon.json.

  1. Opprett Eller rediger Docker-demonkonfigurasjonsfilen, som standard er /etc/docker/daemon.json – filen, som styrer Docker-daemonkonfigurasjonen.

    $ sudo nano /etc/docker/daemon.json
  2. Legg til en dnsnøkkel med en ELLER FLERE IP-adresser som verdier. Hvis filen hareksisterende innhold, trenger du bare å legge til eller redigere dns – linjen.

    { "dns": }

    hvis din interne DNS-server ikke kan løse offentlige IP-adresser, må du inkludere minst EN DNS-server som kan, slik at du kan koble Til Docker Hub og såat beholderne dine kan løse internett-domenenavn.

    Lagre og lukk filen.

  3. Start Docker-demonen på nytt.

    $ sudo service docker restart
  4. Kontroller At Docker kan løse eksterne IP-adresser ved å prøve å trekke animage:

    $ docker pull hello-world
  5. kontroller om Nødvendig At Docker-beholdere kan løse et internt vertsnavn ved å pinge det.

    $ 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

Deaktiver dnsmasq

Ubuntu

hvis Du foretrekker å ikke endre Docker daemons konfigurasjon for å bruke en spesifikk ip-adresse, følg disse instruksjonene for å deaktivere dnsmasq i networkmanager.

  1. Rediger/etc/NetworkManager/NetworkManager.conf – filen.

  2. Kommenterdns=dnsmasq – linjen ved å legge til et# – tegn til begynnelsen av linjen.

    # dns=dnsmasq

    Lagre og lukk filen.

  3. Start Både NetworkManager og Docker på Nytt. Som et alternativ kan du starte på nyttsystemet ditt.

    $ sudo restart network-manager$ sudo restart docker

RHEL, CentOS eller Fedora

for å deaktivere dnsmasqPÅ RHEL, CentOS eller Fedora:

  1. Deaktiver dnsmasqtjeneste:

    $ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
  2. Konfigurer DNS-serverne manuelt ved hjelp av red Hat-dokumentasjon.

Tillat tilgang til ekstern API gjennom en brannmur

hvis du kjører en brannmur på samme vert Som Du kjører Docker, og du vil ha tilgang Til Docker Ekstern API fra en annen vert og ekstern tilgang er aktivert,trenger duå konfigurere brannmuren slik at innkommende tilkoblinger på Docker-porten, som standard til 2376 hvis tls-kryptert transport er aktivert eller 2375ellers.To vanlige brannmurdemoner areUFW (Ukomplisert Brannmur) (ofte brukt For Ubuntu systems) og firewalld (ofte brukt FOR RPM-baserte systemer). Se dokumentasjonen FOR OPERATIVSYSTEMET og brannmuren, menfølgende informasjon kan hjelpe deg med å komme i gang. Disse alternativene er rettferdigpermissive, og du vil kanskje bruke en annen konfigurasjon som låser yoursystem ned mer.

  • UFW: Sett DEFAULT_FORWARD_POLICY="ACCEPT" i konfigurasjonen din.

  • firewalld: Legg til regler som ligner på følgende i policyen din(en for innkommende forespørsler og en for utgående forespørsler). Pass på at grensesnittnavnene og kjedenavnene er riktige.

    <direct> </direct>

kjernen støtter ikke cgroup swap grense evner

På Ubuntu eller Debian verter, kan du se meldinger som ligner på følgende nårarbeider med et bilde.

WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.

denne advarselen forekommer ikke PÅ RPM-baserte systemer, som aktiverer disse mulighetene som standard.

hvis du ikke trenger disse funksjonene, kan du ignorere advarselen. Du kan aktivere disse funksjonene På Ubuntu eller Debian ved å følge disse instruksjonene. Memoryand swap regnskap medføre en overhead på ca 1% av den totale tilgjengelige memoryand en 10% total ytelsesforringelse, selv Om Docker ikke kjører.

  1. Logg Inn På Ubuntu-eller Debian-verten som bruker medsudo privilegier.

  2. Rediger/etc/default/grub – filen. Legg til eller rediger GRUB_CMDLINE_LINUX linjenå legge til følgende to nøkkelverdipar:

    GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

    Lagre og lukk filen.

  3. Oppdater GRUB.

    $ sudo update-grub

    HVIS GRUB-konfigurasjonsfilen din har feil syntaks, er det en feil occurs.In gjenta trinn 2 og 3 i dette tilfellet.

    endringene trer i kraft når systemet startes på nytt.

  • Ta en titt På Opplæringsmodulene For Å lære hvordan du bygger et bilde og kjører det som et containerisert program.
  • Gjennomgå emnene I Utvikle Med Docker for å lære å bygge nye applikasjoner ved Hjelp Av Docker.Docker, Docker dokumentasjon, krav, apt, installasjon, ubuntu, installere, avinstallere, oppgradere, oppdatere