Post-instalační kroky pro Linux
Odhadovaná doba čtení: 15 minut
Tato část obsahuje volitelné postupy pro konfiguraci Linux hostitelé workbetter s Docker.
- Správa Docker jako non-root uživatele
- Konfigurovat Docker start na boot
- použijte jiný úložný motor
- Konfigurovat protokolování výchozí ovladač
- nakonfigurujte, kde démon Docker poslouchá připojení
- Konfigurace vzdáleného přístupu s systemd unit souboru
- konfigurace vzdáleného přístupu pomocí démona.json
- Povolit IPv6 na Docker daemon
- odstraňování problémů
- Kompatibilita jádra
- Nelze se připojit k Docker daemon
- IP forwarding problémy
- DNS resolver nalezen v resolv.conf a kontejnery nemůžu použít
- Zadejte DNS servery pro Docker
- Zakázat dnsmasq
- Ubuntu
- RHEL, CentOS nebo Fedora
- Povolit přístup ke vzdálené API prostřednictvím brány firewall
- Vaše jádro nepodporuje cgroup swap omezení schopnosti
Správa Docker jako non-root uživatele
Docker daemon váže na Unix socket, místo portu TCP. Podle defaultže unix socket je vlastněn uživatelem root
a ostatní uživatelé k němu mají přístup pouze pomocí sudo
. Démon Docker vždy běží jako uživatel root
.
Pokud nechcete, aby předmluvě docker
příkaz sudo
vytvořit Unixgroup nazývá docker
přidat uživatele na to. Když se spustí démon Docker, vytvoří soket Unix přístupný členům skupiny docker
.
Upozornění
docker
skupina uděluje oprávnění ekvivalentroot
uživatel. Podrobnosti o tom, jak to ovlivňuje zabezpečení ve vašem systému, Seedocker Daemon Attack Surface.
Poznámka:
spustit Docker bez oprávnění uživatele root, seeRun Docker daemon jako non-root uživatel (Rootless režimu).
vytvořit docker
skupiny a přidat své uživatele:
-
Vytvořit
docker
skupina.$ sudo groupadd docker
-
přidejte uživatele do skupiny
docker
.$ sudo usermod -aG docker $USER
-
odhlaste se a přihlaste se zpět, aby bylo členství ve skupině přehodnoceno.
při testování na virtuálním počítači může být nutné restartovat virtuální stroj, aby se změny projevily.
v desktopovém prostředí Linuxu, jako je X Windows, se zcela odhlaste a poté se znovu přihlaste.
v systému Linux můžete také spustit následující příkaz k aktivaci změn skupin:
$ newgrp docker
-
Ověřte, že můžete spustit
docker
příkazy bezsudo
.$ docker run hello-world
Tento příkaz stáhne testovací obraz a spustí jej v kontejneru. Po spuštění kontejneru vytiskne informační zprávu a ukončí.
Pokud jste původně běžel Docker CLI příkazy pomocí
sudo
před addingyour uživatele dodocker
skupiny, může se zobrazit následující chybová zpráva,která označuje, že~/.docker/
adresář byl vytvořen withincorrect oprávnění v důsledkusudo
příkazy.WARNING: Error loading config file: /home/user/.docker/config.json -stat /home/user/.docker/config.json: permission denied
tento problém vyřešit, odeberte
~/.docker/
adresář(to je znovu automaticky, ale žádné vlastní settingsare ztratil), nebo změnit jeho oprávnění a vlastnictví pomocí následujících příkazů:$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R$ sudo chmod g+rwx "$HOME/.docker" -R
Konfigurovat Docker start na boot
Většina současných distribucí Linuxu (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 andhigher) používání systemd
spravovat služby, které se spustí při systemboots. V Debianu a Ubuntu je služba Docker nakonfigurována tak, aby se spouštěla ve výchozím nastavení. Automaticky spustit Docker a Containerd na startu pro otherdistros, použijte příkazy níže:
$ sudo systemctl enable docker.service$ sudo systemctl enable containerd.service
zakázat toto chování, použijte disable
místo.
$ sudo systemctl disable docker.service$ sudo systemctl disable containerd.service
Pokud potřebujete přidat HTTP Proxy, nastavit jiný adresář nebo oddíl pro theDocker runtime soubory, nebo provést jiné úpravy, seecustomize vaše systemd Docker daemon možnosti.
použijte jiný úložný motor
Pro informace o různých úložných motorech, ovladačích seeStorage.Výchozí modul úložiště a seznam podporovaných modulů úložiště závisí na distribuci Linuxu vašeho hostitele a dostupných ovladačích jádra.
Konfigurovat protokolování výchozí ovladač
Docker poskytuje možnost shromažďovat a zobrazení dat protokolu z všechny kontejnery běží na hostiteli prostřednictvím řady oflogging ovladače. Výchozí ovladač protokolování, json-file
, zapíše soubory protokolu ve formátu tojson do hostitelského souborového systému. Postupem času se tyto soubory protokolu rozšiřujíve velikosti, což vede k potenciálnímu vyčerpání diskových prostředků.
Ke zmírnění těchto problémů, a to buď nakonfigurovat json-file
přihlášení řidiče toenable log rotace, použijte alternativní přihlášení driversuch jako „místní“ přihlášení ovladač, který provádí rotace log ve výchozím nastavení, nebo použijte přihlášení řidiče, který sendslogs do vzdáleného protokolování agregátor.
nakonfigurujte, kde démon Docker poslouchá připojení
ve výchozím nastavení démon Docker poslouchá připojení na Unixovém soketu, aby přijal dotazy od místních klientů. Je možné povolit Docker přijímat requestsfrom vzdálených hostitelů konfigurací poslouchat na IP adresu a port stejně jako unix socket. Podrobnější informace o této možnosti konfiguracepodívejte se na sekci „Bind Docker to another host/port or a unix socket“ referenčního článku Docker CLI.
Zabezpečené připojení
Před konfigurací Docker, aby bylo možné přijímat připojení od vzdálených hostitelů je kriticky důležité, aby youunderstand bezpečnostní důsledky otevření docker k síti. Pokud nebudou podniknuty kroky k zabezpečení připojení, je možné pro dálkové non-root uživatelům získat root přístup na hostitele. Další informace o tom, jak používat certifikáty TLS k zabezpečení tohoto připojení, naleznete v tomto článku o ochraně soketu démona Dockeru.
Konfigurace Docker přijímat vzdálená připojení může být provedeno s docker.service
systemd unit soubor pro Linux distribucí pomocí systemd, jako je poslední verze RedHat, CentOS, Ubuntu a SLES, nebo s daemon.json
soubor, který isrecommended pro Linux distribucí, které nemají používat systemd.
systemd vs daemon.json
Konfigurace Docker poslouchat připojení jak pomocí
systemd
soubor, jednotka adaemon.json
soubor příčin konfliktu, který zabraňuje Docker od spuštění.
Konfigurace vzdáleného přístupu s systemd unit souboru
-
Použijte příkaz
sudo systemctl edit docker.service
otevřít přepsat soubordocker.service
v textovém editoru. -
přidejte nebo upravte následující řádky nahrazením vlastních hodnot.
ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
-
uložte soubor.
-
znovu načtěte konfiguraci
systemctl
.$ sudo systemctl daemon-reload
-
restartujte Docker.
$ sudo systemctl restart docker.service
-
Zkontrolujte, zda tato změna byla poctěn tím, že přezkoumání výstup
netstat
potvrditdockerd
naslouchá na nastaveném portu.$ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
konfigurace vzdáleného přístupu pomocí démona.json
-
Nastavte
hosts
pole/etc/docker/daemon.json
připojení k UNIX socketu a IP adresu, a to následovně:{ "hosts": }
-
Restartujte Docker.
-
Zkontrolujte, zda tato změna byla poctěn tím, že přezkoumání výstup
netstat
potvrditdockerd
naslouchá na nastaveném portu.$ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Povolit IPv6 na Docker daemon
povolit IPv6 na Docker daemon, seeEnable podporou IPv6.
odstraňování problémů
Kompatibilita jádra
Docker nelze spustit správně, pokud je jádro starší než verze 3.10 nebo pokud chybí některé moduly. Chcete-li zkontrolovat kompatibilitu jádra, můžete si stáhnout aspusťte skript check-config.sh
.
$ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh$ bash ./check-config.sh
skript funguje pouze na Linuxu, nikoli na macOS.
Nelze se připojit k Docker daemon
Pokud uvidíte chybu, jako je například následující, vaše Docker klienta může být configuredto připojení k Docker daemon na jiném hostiteli, a že host nemusí bereachable.
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
zjistit, které host váš klient je nakonfigurován tak, aby připojit, zkontrolujte hodnotu z DOCKER_HOST
proměnné ve vašem prostředí.
$ env | grep DOCKER_HOST
Pokud tento příkaz vrátí hodnotu, Docker klienta je nastavena pro připojení k aDocker daemon běží na tomto hostiteli. Pokud není nastaven, je klient Docker nastavenpřipojte se k démonovi Docker běžícímu na místním hostiteli. Pokud je nastavena na chyby,použijte následující příkaz k odstavení:
$ unset DOCKER_HOST
možná Budete muset upravit své prostředí v souborech, např. ~/.bashrc
nebo~/.profile
, aby se zabránilo DOCKER_HOST
proměnná z je seterroneously.
Pokud DOCKER_HOST
je nastaveno jak má, ověřte, že Docker daemon je runningon vzdáleného hostitele, a že brána firewall nebo výpadku sítě není prevence od připojení.
IP forwarding problémy
Pokud jste ručně nastavit síť pomocí systemd-network
systemd
verze 219 nebo vyšší, Docker kontejnery nemusí být schopen získat přístup do vaší sítě.Začínající systemd
verze 220, nastavení přesměrování pro danou síť(net.ipv4.conf.<interface>.forwarding
) výchozí nastavení na vypnuto. Toto nastavenízabraňuje předávání IP. Je také v rozporu s dockerovým chováním enablingthe net.ipv4.conf.all.forwarding
nastavení v kontejnerech.
Chcete-li vyřešit tento na RHEL, CentOS nebo Fedora, upravit <interface>.network
soubor /usr/lib/systemd/network/
na Docker hostitele(např.: /usr/lib/systemd/network/80-container-host0.network
) a přidejte následující blok v oddíl.
...IPForward=kernel# ORIPForward=true
tato konfigurace umožňuje předávání IP z kontejneru podle očekávání.
DNS resolver nalezen v resolv.conf a kontejnery nemůžu použít
Linuxové systémy, které používají GUI mají často network manager systémem, který používádnsmasq
instance běží na adresu zpětné smyčky, například 127.0.0.1
nebo127.0.1.1
do mezipaměti DNS žádosti, a přidá tuto položku do/etc/resolv.conf
. Služba dnsmasq
urychluje vyhledávání upDNS a také poskytuje služby DHCP. Tato konfigurace nefunguje v kontejneru Docker, který má vlastní jmenný prostor sítě, protože kontejner Docker řeší adresy zpětné smyčky, jako je 127.0.0.1
a je velmi nepravděpodobné, že by server DNS provozoval na své vlastní adrese loopback.
Pokud se Docker zjistí, že žádný server DNS uvedené v /etc/resolv.conf
je fullyfunctional DNS server, následující varování se vyskytuje, a Docker používá publicDNS servery poskytované společností Google v 8.8.8.8
8.8.4.4
pro rozlišení DNS.
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containerscan't use it. Using default external servers :
Pokud vidíte toto varování, nejprve zkontrolujte, zda používáte dnsmasq
:
$ ps aux |grep dnsmasq
Pokud váš kontejner se musí vyřešit hostitelů, které jsou uvnitř vaší sítě, veřejnou nameservery jsou adekvátní. Máte dvě možnosti:
- můžete zadat DNS server pro Docker k použití, nebo
- můžete zakázat
dnsmasq
v Networkmanageru. Pokud to uděláte, NetworkManageradds vaše pravda DNS nameserver/etc/resolv.conf
, ale ztratíte to, aby případné výhodydnsmasq
.
stačí použít jednu z těchto metod.
Zadejte DNS servery pro Docker
výchozí umístění konfiguračního souboru je /etc/docker/daemon.json
. Můžete změnit umístění konfiguračního souboru pomocí příznaku démona --config-file
. Níže uvedená dokumentace předpokládá, že konfigurační soubor je lokalizovánat /etc/docker/daemon.json
.
-
Vytvořte nebo upravte Docker daemon configuration file, které výchozí hodnota je
/etc/docker/daemon.json
soubor, který řídí Docker daemonconfiguration.$ sudo nano /etc/docker/daemon.json
-
přidejte klíč
dns
s jednou nebo více IP adresami jako hodnotami. Pokud soubor máexistující obsah, stačí přidat nebo upravit řádekdns
.{ "dns": }
Pokud vaše vnitřní DNS server nemůže vyřešit veřejnou IP adresy, obsahovat alespoň jeden server DNS, který může, takže se můžete připojit k Docker Hub a aby vaše kontejnery lze vyřešit internetových doménových jmen.
Uložte a zavřete soubor.
-
restartujte démona Dockeru.
$ sudo service docker restart
-
ověřte, že Docker dokáže vyřešit externí IP adresy pokusem vytáhnout animage:
$ docker pull hello-world
-
Pokud je to nutné, ověřte, že Docker kontejnery lze vyřešit vnitřní hostnameby 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
Zakázat dnsmasq
Ubuntu
Pokud nechcete změnit Docker daemon konfiguraci použít specificIP adresu, postupujte podle pokynů zakázat dnsmasq
v Networkmanageru.
-
upravte soubor
/etc/NetworkManager/NetworkManager.conf
. -
Komentář
dns=dnsmasq
řádek po přidání#
znak počátkem line.# dns=dnsmasq
Uložte a zavřete soubor.
-
restartujte NetworkManager i Docker. Jako alternativu můžete restartovat počítačváš systém.
$ sudo restart network-manager$ sudo restart docker
RHEL, CentOS nebo Fedora
zakázat dnsmasq
na RHEL, CentOS nebo Fedora:
-
Zakázat
dnsmasq
služby:$ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
-
nakonfigurujte servery DNS ručně pomocí dokumentace Hat.
Povolit přístup ke vzdálené API prostřednictvím brány firewall
Pokud spustíte firewall na stejném hostiteli, jak si spustit Docker a chcete accessthe Docker Remote API od jiného hostitele a vzdálený přístup je povolen, budete potřebovat nakonfigurovat firewall povolit příchozí připojení na Docker port,které výchozí hodnota je 2376
pokud TLS šifrované dopravy je povoleno nebo 2375
jinak.
dva běžné démony firewallu jsouufw (nekomplikovaný Firewall) (často používaný pro systémy Ubuntu) a firewalld (často používaný pro systémy založené na RPM). Nahlédněte do dokumentace operačního systému a brány firewall, alenásledující informace vám mohou pomoci začít. Tyto možnosti jsou fairlypermissive a možná budete chtít použít jinou konfiguraci, která uzamkne yoursystem dolů více.
-
UFW: nastavte
DEFAULT_FORWARD_POLICY="ACCEPT"
ve vaší konfiguraci. -
firewalld: přidejte do svých zásad pravidla podobná následujícím (jedno pro příchozí požadavky a jedno pro odchozí požadavky). Ujistěte se, že názvy rozhranía názvy řetězců jsou správné.
<direct> </direct>
Vaše jádro nepodporuje cgroup swap omezení schopnosti
Na Ubuntu nebo Debian hostitelů, můžete vidět zprávy podobné následující whenworking s obrazem.
WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
toto varování se nevyskytuje v systémech založených na RPM, které ve výchozím nastavení umožňují tyto možnosti.
pokud tyto funkce nepotřebujete, můžete varování ignorovat. Tyto funkce Můžete povolit v Ubuntu nebo Debianu podle těchto pokynů. Paměť a swap účetnictví účtuje režijní asi 1% z celkového počtu k dispozici paměť 10% snížení celkového výkonu, i když Docker není spuštěna.
-
přihlaste se do hostitele Ubuntu nebo Debianu jako uživatel s oprávněními
sudo
. -
upravte soubor
/etc/default/grub
. Přidat nebo upravitGRUB_CMDLINE_LINUX
lineto přidat následující dva páry klíč-hodnota:GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Uložte a zavřete soubor.
-
aktualizovat GRUB.
$ sudo update-grub
Pokud vaše GRUB konfigurační soubor má nesprávné syntaxe, dojde k chybě.V tomto případě, opakujte kroky 2 a 3.
změny se projeví po restartování systému.
- podívejte se na začínáme vzdělávacích modulů se naučit, jak vybudovat image a spustit to jako kontejnerové aplikace.
- Přečtěte si témata v Develop with Docker a naučte se, jak vytvářet nové aplikace pomocí Docker.
Docker, Docker dokumentace, požadavky, apt, instalace, ubuntu, instalace, odinstalovat, upgrade, aktualizace