Efter installationssteg för Linux
Beräknad lästid: 15 minuter
det här avsnittet innehåller valfria procedurer för att konfigurera Linux-värdar att workbetter med Docker.
- hantera Docker som en icke-root-användare
- konfigurera Docker för att starta vid start
- använd en annan lagringsmotor
- konfigurera standardloggningsdrivrutin
- konfigurera var Docker-demonen lyssnar efter anslutningar
- konfigurera fjärråtkomst med systemd unit file
- konfigurera fjärråtkomst med demonen.JSON
- aktivera IPv6 på Docker-demonen
- felsökning
- Kärnkompatibilitet
- kan inte ansluta till Docker-demonen
- IP-vidarebefordringsproblem
- DNS resolver finns i resolv.Conf och behållare kan inte använda den
- ange DNS-servrar för Docker
- inaktivera dnsmasq
- Ubuntu
- RHEL, CentOS eller Fedora
- Tillåt åtkomst till remote API via en brandvägg
- din kärna stöder inte cgroup swap limit capabilities
hantera Docker som en icke-root-användare
Docker-demonen binder till ett Unix-uttag istället för en TCP-port. Genom standarddet Unix-uttaget ägs av användaren root
och andra användare kan bara komma åt detmed sudo
. Docker-demonen körs alltid somroot
användare.
om du inte vill förorda kommandotdocker
medsudo
, skapa en Unixgroup som heterdocker
och Lägg till användare till den. När Docker-demonen startar, denskapar ett Unix-uttag som är tillgängligt för medlemmar i gruppen docker
.
Varning
docker
gruppen ger privilegier som motsvararroot
användaren. För mer information om hur detta påverkar säkerheten i ditt system, seedockerdemon Attack yta.
Obs:
för att köra Docker utan root-privilegier, sekör Docker-demonen som en icke-root-användare (rotlöst läge).
för att skapa gruppen docker
och Lägg till din användare:
-
skapa gruppen
docker
.$ sudo groupadd docker
-
Lägg till din användare i gruppen
docker
.$ sudo usermod -aG docker $USER
-
Logga ut och logga in igen så att ditt gruppmedlemskap utvärderas igen.
om testning på en virtuell maskin kan det vara nödvändigt att starta om den virtuella maskinen för att ändringarna ska träda i kraft.
på en stationär Linux-miljö som X Windows, logga ut från din session helt och logga sedan in igen.
På Linux kan du också köra följande kommando för att aktivera ändringarna i grupper:
$ newgrp docker
-
kontrollera att du kan köra
docker
kommandon utansudo
.$ docker run hello-world
detta kommando hämtar en testbild och kör den i en behållare. När thecontainer körs skriver den ut ett informationsmeddelande och avslutas.
om du ursprungligen körde Docker CLI-kommandon med
sudo
innan du lägger tilldin användare idocker
– gruppen kan du se följande fel, vilket indikerar att din~/.docker/
– katalog skapades medfelaktiga behörigheter på grund avsudo
kommandon.WARNING: Error loading config file: /home/user/.docker/config.json -stat /home/user/.docker/config.json: permission denied
för att åtgärda detta problem, antingen ta bort
~/.docker/
katalog (det återskapas automatiskt, men alla anpassade inställningarär förlorade), eller ändra sitt ägande och behörigheter medföljande kommandon:$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R$ sudo chmod g+rwx "$HOME/.docker" -R
konfigurera Docker för att starta vid start
de flesta aktuella Linux-distributioner (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 ochhögre) använd
systemd
för att hantera vilka tjänster som startar när systemboots. På Debian och Ubuntu är Docker-tjänsten konfigurerad att starta vid uppstartsom standard. För att automatiskt starta Docker och Containerd vid start för otherdistros, använd kommandona nedan:$ sudo systemctl enable docker.service$ sudo systemctl enable containerd.service
för att inaktivera detta beteende, använd istället
disable
.$ sudo systemctl disable docker.service$ sudo systemctl disable containerd.service
om du behöver lägga till en HTTP-Proxy, ange en annan katalog eller partition för theDocker runtime-filer, eller göra andra anpassningar, seanpassa dina systemd Docker-demonalternativ.
använd en annan lagringsmotor
För information om de olika lagringsmotorerna, selagringsdrivrutiner.Standardlagringsmotorn och listan över lagringsmotorer som stöds beror pådin värds Linux-distribution och tillgängliga kärndrivrutiner.
konfigurera standardloggningsdrivrutin
Docker ger möjlighet att samla in och visa loggdata från alla behållare som körs på en värd via en serie avloggningsdrivrutiner. Standardloggningsdrivrutinen,
json-file
, skriver loggdata tilljson-formaterade filer på värdfilsystemet. Med tiden expanderar dessa loggfileri storlek, vilket leder till potentiell uttömning av diskresurser.för att lindra sådana problem, konfigurera antingen
json-file
loggningsdrivrutin för att aktivera loggrotation, använd alternativ loggningsdrivrutinsom den ”lokala” loggningsdrivrutinensom utför loggrotation som standard, eller använd en loggningsdrivrutin som skickar loggar till en fjärrloggningsaggregat.konfigurera var Docker-demonen lyssnar efter anslutningar
som standard lyssnar Docker-demonen efter anslutningar på ett UNIX-uttag för att acceptera förfrågningar från lokala klienter. Det är möjligt att tillåta Docker att acceptera förfrågningar från fjärrvärdar genom att konfigurera den för att lyssna på en IP-adress och port samtsom UNIX-uttaget. För mer detaljerad information om detta konfigurationsalternativta en titt på avsnittet ”Bind Docker till en annan värd/port eller ett unix-uttag” i Docker CLI-Referensartikeln.
säkra din anslutning
innan du konfigurerar Docker för att acceptera anslutningar från fjärrvärdar är det kritiskt viktigt att du förstår säkerhetsimplikationerna av att öppna docker till nätverket. Om åtgärder inte vidtas för att säkra anslutningen är det möjligt för fjärranslutna icke-root-användare att få root-åtkomst på värden. Mer information om hur du använder TLS-certifikat för att säkra den här anslutningen finns i den här artikeln om hur du skyddar Docker daemon-uttaget.
konfigurera Docker för att acceptera fjärranslutningar kan göras med filen
docker.service
systemd-enhet för Linux-distributioner med systemd, till exempel senaste versionerav RedHat, CentOS, Ubuntu och SLES, eller med filendaemon.json
som ärrekommenderas för Linux-distributioner som inte använder systemd.systemd vs daemon.JSON
konfigurera Docker för att lyssna efter anslutningar med både
systemd
enhetsfilen ochdaemon.json
– filen orsakar en konflikt som förhindrar att Docker startar.konfigurera fjärråtkomst med systemd unit file
-
använd kommandot
sudo systemctl edit docker.service
för att öppna en åsidosättningsfil fördocker.service
I en textredigerare. -
Lägg till eller ändra följande rader, ersätta dina egna värden.
ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
-
spara filen.
-
ladda om
systemctl
konfiguration.$ sudo systemctl daemon-reload
-
Starta om Docker.
$ sudo systemctl restart docker.service
-
kontrollera om ändringen hedrades genom att granska utmatningen från
netstat
för att bekräftadockerd
lyssnar på den konfigurerade porten.$ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
konfigurera fjärråtkomst med demonen.JSON
-
Ställ in
hosts
arrayen i/etc/docker/daemon.json
för att ansluta till UNIX-uttaget och en IP-adress, enligt följande:{ "hosts": }
starta om Docker.
kontrollera om ändringen var hedrad genom att granska utmatningen från
netstat
för att bekräftadockerd
lyssnar på den konfigurerade porten.$ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
aktivera IPv6 på Docker-demonen
för att aktivera IPv6 på Docker-demonen, seeEnable IPv6-stöd.
felsökning
Kärnkompatibilitet
Docker kan inte köras korrekt om din kärna är äldre än version 3.10 eller om det saknas några moduler. För att kontrollera kärnkompatibilitet kan du ladda ner andrun skriptet
check-config.sh
.$ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh$ bash ./check-config.sh
skriptet fungerar bara på Linux, inte macOS.
kan inte ansluta till Docker-demonen
Om du ser ett fel som följande kan din Docker-klient konfigureras för att ansluta till en Docker-Demon på en annan värd, och den värden kanske inte kan nås.
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
för att se vilken värd din klient är konfigurerad att ansluta till, kontrollera värdet av
DOCKER_HOST
variabel i din miljö.$ env | grep DOCKER_HOST
om detta kommando returnerar ett värde är Docker-klienten inställd på att ansluta till adockerdemonen som körs på den värden. Om den inte är inställd är Docker-klienten inställd påanslut till Docker-demonen som körs på den lokala värden. Om det är felaktigt,använd följande kommando för att avmarkera det:
$ unset DOCKER_HOST
Du kan behöva redigera din miljö i filer som
~/.bashrc
eller~/.profile
för att förhindra attDOCKER_HOST
variabel från att vara seterroneously.om
DOCKER_HOST
är inställd som avsedd, kontrollera att Docker-demonen körspå fjärrvärden och att en brandvägg eller ett nätverksavbrott inte hindrar dig från att ansluta.IP-vidarebefordringsproblem
om du manuellt konfigurerar ditt nätverk med
systemd-network
medsystemd
version 219 eller senare kanske Docker-behållare inte kan komma åt ditt nätverk.Från och medsystemd
version 220, är vidarebefordringsinställningen för ett givet nätverk(net.ipv4.conf.<interface>.forwarding
) som standard av. Denna inställningförhindrar IP-vidarebefordran. Det strider också mot Dockers beteende att aktiveranet.ipv4.conf.all.forwarding
inställning i behållare.för att komma runt detta på RHEL, CentOS eller Fedora, redigera filen
<interface>.network
I/usr/lib/systemd/network/
på din Docker-värd(ex:/usr/lib/systemd/network/80-container-host0.network
) och lägg tillföljande block iavsnitt.
...IPForward=kernel# ORIPForward=true
denna konfiguration tillåter IP-vidarebefordran från behållaren som förväntat.
DNS resolver finns i resolv.Conf och behållare kan inte använda den
Linux-system som använder ett GUI har ofta en nätverkshanterare som kör, som använder en
dnsmasq
instans som körs på en loopback-adress som127.0.0.1
eller127.0.1.1
för att cache DNS-förfrågningar, och lägger till denna post till/etc/resolv.conf
. Tjänstendnsmasq
snabbar upp uppdateringar och tillhandahåller även DHCP-tjänster. Den här konfigurationen fungerar inte i en Docker-behållare som har sitt eget nätverksnamnområde, eftersomdocker-behållaren löser loopback-adresser som127.0.0.1
till sig själv, och det är mycket osannolikt att köra en DNS-server på egen handloopback-adress.om Docker upptäcker att ingen DNS-server som refereras i
/etc/resolv.conf
är en FULLYFUNCTIONAL DNS-server inträffar följande varning och Docker använder publicDNS-servrarna som tillhandahålls av Google på8.8.8.8
och8.8.4.4
för DNS-upplösning.WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containerscan't use it. Using default external servers :
om du ser denna varning, kontrollera först om du använder
dnsmasq
:$ ps aux |grep dnsmasq
om din behållare behöver lösa värdar som är interna till ditt nätverk, thepublic namnservrar är inte tillräckliga. Du har två val:
- Du kan ange en DNS-server för Docker att använda, eller
- Du kan inaktivera
dnsmasq
I NetworkManager. Om du gör detta, NetworkManageradds din sanna DNS namnserver till/etc/resolv.conf
, men du förlorar de möjliga fördelarna meddnsmasq
.
du behöver bara använda en av dessa metoder.
ange DNS-servrar för Docker
standardplatsen för konfigurationsfilen är
/etc/docker/daemon.json
. Dukan ändra platsen för konfigurationsfilen med flaggan--config-file
daemon. Dokumentationen nedan förutsätter att konfigurationsfilen är lokaliseradvid/etc/docker/daemon.json
.-
skapa eller redigera Docker daemon-konfigurationsfilen, som standard är
/etc/docker/daemon.json
– filen, som styr Docker daemonconfiguration.$ sudo nano /etc/docker/daemon.json
-
Lägg till en
dns
nyckel med en eller flera IP-adresser som värden. Om filen harexisterande innehåll behöver du bara lägga till eller redigera radendns
.{ "dns": }
om din interna DNS-server inte kan lösa offentliga IP-adresser, inkludera minst en DNS-server som kan, så att du kan ansluta till Docker Hub och så att dina behållare kan lösa internetdomännamn.
spara och stäng filen.
-
Starta om Docker-demonen.
$ sudo service docker restart
-
kontrollera att Docker kan lösa externa IP-adresser genom att försöka dra animage:
$ docker pull hello-world
-
kontrollera vid behov att Docker-behållare kan lösa ett internt värdnamngenom att pinga 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
inaktivera
dnsmasq
Ubuntu
om du föredrar att inte ändra Docker-demonens konfiguration för att använda en specifik IP-adress, följ dessa instruktioner för att inaktivera
dnsmasq
I NetworkManager.-
redigera filen
/etc/NetworkManager/NetworkManager.conf
. -
kommentera
dns=dnsmasq
rad genom att lägga till ett#
tecken till början av raden.# dns=dnsmasq
spara och stäng filen.
-
Starta om både NetworkManager och Docker. Som ett alternativ kan du starta omditt system.
$ sudo restart network-manager$ sudo restart docker
RHEL, CentOS eller Fedora
för att inaktivera
dnsmasq
på RHEL, CentOS eller Fedora:-
inaktivera
dnsmasq
service:$ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
-
konfigurera DNS-servrarna manuellt med hjälp avred Hat-dokumentation.
Tillåt åtkomst till remote API via en brandvägg
om du kör en brandvägg på samma värd som du kör Docker och du vill komma åtdocker Remote API från en annan värd och fjärråtkomst är aktiverad behöver duför att konfigurera din brandvägg för att tillåta inkommande anslutningar på Docker-porten, som standard
2376
om TLS-krypterad transport är aktiverad eller2375
annars.två vanliga brandväggsdemoner ärufw (okomplicerad brandvägg) (oftaanvänds för Ubuntu-system) och firewalld (används oftaför RPM-baserade system). Se dokumentationen för ditt operativsystem och brandvägg, men följande information kan hjälpa dig att komma igång. Dessa alternativ är fairlypermissive och du kanske vill använda en annan konfiguration som låser yoursystem ner mer.
-
UFW: Ställ in
DEFAULT_FORWARD_POLICY="ACCEPT"
I din konfiguration. -
firewalld: Lägg till regler som liknar följande i din policy (en för kommande förfrågningar och en för utgående förfrågningar). Se till att gränssnittsnamnen och kedjans namn är korrekta.
<direct> </direct>
din kärna stöder inte cgroup swap limit capabilities
På Ubuntu-eller Debian-värdar kan du se meddelanden som liknar följande när du arbetar med en bild.
WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
denna varning förekommer inte på RPM-baserade system, vilket möjliggör dessa möjligheter som standard.
Om du inte behöver dessa funktioner kan du ignorera varningen. Du kan aktivera dessa funktioner på Ubuntu eller Debian genom att följa dessa instruktioner. Memoryand swap accounting medför en omkostnad på cirka 1% av det totala tillgängliga minnet och en total prestandaförsämring på 10%, även om Docker inte körs.
-
Logga in på Ubuntu – eller Debian-värden som användare med
sudo
privilegier. -
redigera filen
/etc/default/grub
. Lägg till eller redigera linjenGRUB_CMDLINE_LINUX
Lägg till följande två nyckelvärdespar:GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
spara och stäng filen.
-
uppdatera GRUB.
$ sudo update-grub
om din GRUB-konfigurationsfil har felaktig syntax kan ett fel occurs.In detta fall, upprepa steg 2 och 3.
ändringarna träder i kraft när systemet startas om.
- ta en titt på utbildningsmodulerna Kom igång för att lära dig hur du bygger en bild och kör den som en containeriserad applikation.
- granska ämnena i Utveckla med Docker för att lära dig att bygga nya applikationer med Docker.
Docker, Docker dokumentation, krav, apt, installation, ubuntu, installera, avinstallera, uppgradera, uppdatera
-
-
-