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
- Konfigurer Docker for å starte ved oppstart
- Bruk en annen lagringsmotor
- Konfigurer standard logging driver
- Konfigurer Hvor Docker-demonen lytter etter tilkoblinger
- Konfigurere ekstern tilgang med systemd-enhetsfil
- Konfigurere ekstern tilgang med demon.Json
- Aktiver IPv6 på Docker-demonen
- Feilsøking
- kernel compatibility
- kan ikke koble Til Docker-demonen
- problemer MED ip-videresending
- DNS resolver funnet i resolv.Conf og containere kan ikke bruke Det
- Angi DNS-servere for Docker
- Deaktiver dnsmasq
- Ubuntu
- Tillat tilgang til ekstern API gjennom en brannmur
- kjernen støtter ikke cgroup swap grense evner
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 tilsvarenderoot
bruker. 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:
-
Opprett
docker
gruppen.$ sudo groupadd docker
-
Legg til brukeren i
docker
gruppen.$ sudo usermod -aG docker $USER
-
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
-
Kontroller at du kan kjøre
docker
kommandoer utensudo
.$ 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 idocker
– gruppen, kan du se følgende feil,som indikerer at~/.docker/
– katalogen ble opprettet medfeil tillatelser på grunn avsudo
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) bruksystemd
for å 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, brukdisable
i 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.service
systemd-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
-
Bruk kommandoen
sudo systemctl edit docker.service
for å åpne en overstyringsfil fordocker.service
i et tekstredigeringsprogram. -
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
-
Lagre filen.
-
Last inn
systemctl
konfigurasjon.$ sudo systemctl daemon-reload
-
Start Docker På Nytt.
$ sudo systemctl restart docker.service
-
Kontroller om endringen ble innfridd ved å se gjennom utdataene til
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
Konfigurere ekstern tilgang med demon.Json
-
Sett
hosts
matrisen i/etc/docker/daemon.json
for å koble TIL UNIX-kontakten og EN IP-adresse, som følger:{ "hosts": }
-
start docker på nytt.
-
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~/.bashrc
eller~/.profile
for å forhindreDOCKER_HOST
variabel 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
medsystemd
versjon 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>.network
filen 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.conf
dnsmasq
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.conf
er en fullt fungerende DNS-server, oppstår følgende advarsel Og Docker bruker publicDNS-serverne levert Av Google på 8.8.8.8
og 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 meddnsmasq
.
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-file
daemon-flagget. Dokumentasjonen nedenfor forutsetter at konfigurasjonsfilen er lokalisertpå /etc/docker/daemon.json
.
-
Opprett Eller rediger Docker-demonkonfigurasjonsfilen, som standard er
/etc/docker/daemon.json
– filen, som styrer Docker-daemonkonfigurasjonen.$ sudo nano /etc/docker/daemon.json
-
Legg til en
dns
nøkkel med en ELLER FLERE IP-adresser som verdier. Hvis filen hareksisterende innhold, trenger du bare å legge til eller redigeredns
– 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.
-
Start Docker-demonen på nytt.
$ sudo service docker restart
-
Kontroller At Docker kan løse eksterne IP-adresser ved å prøve å trekke animage:
$ docker pull hello-world
-
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.
-
Rediger
/etc/NetworkManager/NetworkManager.conf
– filen. -
Kommenter
dns=dnsmasq
– linjen ved å legge til et#
– tegn til begynnelsen av linjen.# dns=dnsmasq
Lagre og lukk filen.
-
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 dnsmasq
PÅ RHEL, CentOS eller Fedora:
-
Deaktiver
dnsmasq
tjeneste:$ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
-
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 2375
ellers.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.
-
Logg Inn På Ubuntu-eller Debian-verten som bruker med
sudo
privilegier. -
Rediger
/etc/default/grub
– filen. Legg til eller redigerGRUB_CMDLINE_LINUX
linjenå legge til følgende to nøkkelverdipar:GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Lagre og lukk filen.
-
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