Oprava Dockeru na Linuxovém serveru, začněte ověřením, zda je démon Docker spuštěn, přečtením protokolů, kontrolou místa na disku a oprávnění a poté vyřešte běžné problémy: syntaxe daemon.json, pravidla firewallu a iptables, chyby ovladače úložiště, DNSa cgroups. V krajním případě restartujte služby, odstraňte nepoužívaná data nebo přeinstalujte Docker.
Pokud hledáte způsob, jak opravit Docker na Linuxovém serveru, tato příručka vám poskytne jasný a podrobný postup řešení problémů, který zahrnuje stav služeb, protokoly, oprávnění, ovladače úložiště, firewally, DNS, cgroups a bezpečné čištění. Také se podělím o opravy z praxe, které používám na produkčních serverech, abych Docker rychle stabilizoval.
Rychlá odpověď: Oprava Dockeru na Linuxovém serveru v 10 krocích
- Zkontrolujte službu Docker: stav, spuštění, povolení při bootování.
- Čtení protokolů pomocí journalctl pro včasné odhalení chyb.
- Ověřte oprávnění socketu a přidejte uživatele do skupiny Docker.
- Ověřte syntaxi souboru /etc/docker/daemon.json.
- Zkontrolujte místo na disku/inody a ovladač úložiště (overlay2).
- Oprava sítě: iptables/UFW/firewalld, DNSa přesměrování IP adres.
- Řešení problémů s cgroups v1/v2 a moduly jádra.
- Odstraňte nepoužívané obrazy/svazky, abyste uvolnili místo.
- Restartujte Docker a kontejner čistě.
- Jako poslední možnost si zálohujte a znovu nainstalujte Docker.
Nejprve diagnostikujte: Je démon Docker spuštěn?
Zkontrolujte stav služby a povolte ji
# Check status
sudo systemctl status docker
# Start and enable on boot
sudo systemctl start docker
sudo systemctl enable docker
# If containerd is required but down
sudo systemctl status containerd
sudo systemctl start containerdPokud se Docker nespustí, stavový výstup obvykle odkazuje na hlavní příčinu (selhání ovladače úložiště, neplatná konfigurace, chybějící modul jádra nebo problémy s oprávněními). Zachyťte chybová zpráva, která vám pomůže s opravou.
Čtení protokolů Dockeru pro odstranění chyb
# Review last hour of logs
sudo journalctl -u docker --since -1h --no-pager
# Full boot logs (if it dies during boot)
sudo journalctl -b -u docker --no-pagerHledejte řádky zmiňující overlay2, daemon.json, iptables, cgroup, DNSnebo „Nelze se připojit k démonu Dockeru.“ Tato klíčová slova odpovídají níže uvedeným běžným opravám.
Oprava oprávnění socketů a přístupu uživatelů
# Is the socket present and permissions correct?
ls -l /var/run/docker.sock
# If you see "permission denied", add your user to the docker group
sudo usermod -aG docker $USER
# Apply group without logout (current shell only)
newgrp docker
# Test
docker infoV zabezpečeném prostředí můžete preferovat přístup k Dockeru pouze přes sudo. Pokud se záměrně vyhýbáte skupině docker, vždy spusťte příkazy dockeru se sudo.
Časté chyby a spolehlivé opravy
„Nelze se připojit k démonovi Dockeru“
- Ujistěte se, že služba běží: ukotvitelný panel stavu systemctl.
- Opravte oprávnění socketu nebo přidejte uživatele do skupiny Docker.
- Pokud používáte rootless Docker, ujistěte se, že dockerd-rootless-setuptool.sh byl spuštěn a vaše proměnné prostředí jsou nastaveny.
- Ověřte, zda DOCKER_HOST neodkazuje na nesprávný socket nebo koncový bod TCP.
Docker selže po upgradu (zasekne se nebo se nespustí)
# Validate daemon.json (must be valid JSON)
sudo cat /etc/docker/daemon.json | jq . # or use python -m json.tool
# Remove stale PID file if present
sudo rm -f /var/run/docker.pid
# Reload units and restart
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl status dockerPorovnejte verzi Dockeru s containerdem. Neshoda může narušit spuštění. Pokud se v logech zmiňuje container, aktualizujte obě verze ze stejného repozitáře (Docker Engine nebo distribuční balíčky), aby zůstaly kompatibilní.
Ovladač úložiště a místo na disku (overlay2)
# Check disk space and inodes
df -h
df -i
# See Docker space usage
docker system df
# Prune unused data (confirm prompts)
docker system prune
docker image prune -a
docker volume prune
docker network prunePokud se objeví chyby overlay2, ujistěte se, že vaše jádro má načtený modul overlay a souborový systém podporuje d_type. XFS bez d_type způsobuje selhání overlay2.
# Load required modules
sudo modprobe overlay
sudo modprobe br_netfilter
# Check XFS d_type (should be ftype=1)
xfs_info /var/lib/docker 2>&1 | grep ftypePokud je ftype=0, migrujte kořenový adresář dat Dockeru na oddíl s ftype=1 (nebo ext4) a poté restartujte Docker. Vyhněte se používání devicemapperu legacy, pokud nerozumíte jeho důsledkům.
Síť a DNSNelze načíst obrázky nebo kontejnery nelze vyřešit
- Ověřte odchozí připojení a DNS na hostiteli: kopat or nslookup.
- Přepsat DNS uvnitř Dockeru, pokud je soubor host resolv.conf neobvyklý (např. systemd resolved).
- Povolte přesměrování IP adres a ujistěte se, že politika FORWARD není nastavena na DROP.
- Zarovnejte Docker iptables s vaším firewallem (UFW, firewalld, nftables).
# Example daemon.json with DNS and log limits
sudo tee /etc/docker/daemon.json >/dev/null <<'JSON'
{
"dns": ["1.1.1.1","8.8.8.8"],
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
JSON
sudo systemctl restart docker
# Enable IP forwarding
sudo sysctl -w net.ipv4.ip_forward=1
# Persist settings
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-docker-ipforward.conf
sudo sysctl --systemPokud je UFW aktivní, nastavte DEFAULT_FORWARD_POLICY=„ACCEPT“ v souboru /etc/default/ufw a povolte podsíť Docker bridge nebo ji zakažte. iptables management a napište si vlastní pravidla.
Firewally: konflikty UFW, firewalld, nftables
# UFW: forward policy and bridge allowance
sudo sed -i 's/^DEFAULT_FORWARD_POLICY=.*/DEFAULT_FORWARD_POLICY="ACCEPT"/' /etc/default/ufw
sudo ufw allow 2375/tcp # only if you intentionally expose (not recommended without TLS)
sudo ufw reload
# firewalld: trust docker zone or allow masquerade
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --permanent --add-masquerade
sudo firewall-cmd --reload
# If nftables is default, ensure iptables-legacy is used when required
sudo update-alternatives --config iptables # choose legacy if Docker expects it
sudo systemctl restart dockerPokud nepovolíte TLS, raději nezpřístupňovejte démona Dockeru přes TCP. Použijte socket nebo SSH tunel pro dálkové ovládání management.
Nekompatibilita cgroups v2 a problémy s jádrem
- Moderní Docker a containerd podporují cgroups v2. Pokud používáte starší verze, aktualizujte oba.
- Pokud se musíte dočasně vrátit k cgroups v1, přidejte parametr kernelu systemd.unified_cgroup_hierarchy=0 a restartujte.
- Ujistěte se, že jsou přítomny požadované moduly: obložit, br_netfilter.
# Quick module check
lsmod | egrep 'overlay|br_netfilter'
sudo modprobe overlay br_netfilterBezpečné vyčištění Dockeru pro uvolnění místa
Nadbytečné obrazy, zastavené kontejnery, volné svazky a velké protokoly běžně způsobují, že Docker není k dispozici místo na zařízení nebo dochází k vyčerpání inodů. Úklid provádějte záměrně.
# Review space usage first
docker system df
docker image ls --digests
docker volume ls
# Remove everything unused (interactive)
docker system prune
docker system prune -a # also removes unused images
docker volume prune
docker network prunePro produkční prostředí implementujte rotaci protokolů a vyhněte se neomezeným protokolům kontejnerů. Výše uvedený příklad daemon.json uzavírá protokol. velikost a soubory.
Ověření konfigurace: daemon.json a systemd
Neplatný JSON nebo konfliktní možnosti v souboru /etc/docker/daemon.json zabrání spuštění Dockeru. Udržujte jej minimalistický a po změnách jej ověřte.
# Validate config
sudo jq . /etc/docker/daemon.json
# After editing, reload and restart
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl status dockerPokud jste upravili jednotku systemd, zvažte použití přepsání drop-in namísto úpravy hlavního souboru. Tím se zabrání přerušení upgradu.
# Create a drop-in and set resource limits or startup dependencies
sudo systemctl edit docker
# Then:
sudo systemctl daemon-reload
sudo systemctl restart dockerPoslední možnost: Reset nebo přeinstalace Dockeru
Pokud je instalace silně poškozená, zálohujte ji a znovu ji nainstalujte. Pokud potřebujete zachovat obrazy a svazky, zachovejte nebo přesuňte soubor /var/lib/docker.
# Stop services
sudo systemctl stop docker containerd
# Optional: back up Docker data
sudo rsync -aHAX --info=progress2 /var/lib/docker/ /backup/docker-$(date +%F)/
# Debian/Ubuntu: remove and install cleanly
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker /var/lib/containerd
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# RHEL/CentOS/Rocky/Alma
sudo dnf remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker /var/lib/containerd
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
docker infoNejlepší postupy pro prevenci budoucích výpadků Dockeru
- Verze Dockeru a containerd kompatibilní s PINem; aktualizace během údržbových oken.
- Udržujte jádro aktualizované a zajistěte, aby se moduly overlay a br_netfilter načítaly při bootování.
- Používejte rotaci protokolů a plány prořezávání, abyste zabránili vyčerpání disku.
- Použijte vyhrazený souborový systém s XFS ftype=1 nebo ext4 pro /var/lib/docker.
- Dokumentujte pravidla firewallu; explicitně povolte přesměrování IP adres a NAT.
- Sledujte protokoly docker.service, disku, inodů a chyb pomocí svého zásobníku pozorovatelnosti.
- Vyhněte se přímé úpravě souborů jednotek; pro přepsání použijte rozbalovací moduly systemd.
- Zabezpečte démona: Nevystavujte ho přes TCP bez TLS; raději použijte Unixový socket.
Potřebujete spolehlivé handsfree? Zapnuto YouStable VPS nebo dedikované servery, náš tým podpory může auditovat váš Docker stack, konfigurovat osvědčené postupy a posílit síť, aby vaše kontejnery běžely hladce i při zátěži.
Kontrolní seznam pro řešení problémů (kopírování/vkládání)
- docker stavu systemctl; docker journalctl -u
- ls -l /var/run/docker.sock; usermod -aG docker $USER
- jq . /etc/docker/daemon.json
- df -h; df -i; docker systém df
- překrytí modprobe br_netfilter; sysctl net.ipv4.ip_forward=1
- Zkontrolujte firewall (UFW/firewalld) a zásady FORWARD
- test DNSvolitelně nastavit DNS v souboru daemon.js
- prořezávání dockerského systému (opatrně); nastavení limitů protokolování
- Restartujte docker a container; démon znovu načtěte, pokud se jednotky změnily.
- Pokud stále nefunguje, zálohujte /var/lib/docker a znovu jej nainstalujte.
Také čtení: Zvětšit obrázek bez ztráty kvality
Nejčastější dotazy
Proč Docker v Linuxu hlásí „Nelze se připojit k démonovi Dockeru“?
Démon může být zastaven, váš uživatel nemusí mít přístup k souboru /var/run/docker.sock nebo DOCKER_HOST odkazuje na nesprávný koncový bod. Spusťte službu, přidejte uživatele do skupiny Docker (nebo použijte příkaz Sudo) a ověřte cestu k socketu. Zkontrolujte protokoly, zda v nich nejsou chyby úložiště nebo konfigurace, které blokují spuštění.
Jak opravím selhání Dockeru s pullem a DNS časové limity?
Ověřte, zda hostitel může rozpoznat a dosáhnout registrů. Pokud je resolv.conf managevyřešeno systémem d nebo korporátním DNS, nastavit explicitní DNS servery v souboru /etc/docker/daemon.json a restartujte Docker. Také ověřte, zda firewally a pravidla pro odchozí servery neblokují koncové body registru.
Které problémy s ovladači úložiště narušují Docker v Linuxu?
Příkaz overlay2 selže, pokud souborový systém nepodporuje d_type (je vyžadován XFS ftype=1) nebo pokud chybí moduly jádra. Vyčerpání disku nebo inodů je také běžné. Uvolněte místo pomocí docker system prune, ověřte, zda je overlay načten, a zvažte přesunutí /var/lib/docker do správného souborového systému.
Jak opravím Docker po upgradu operačního systému nebo jádra?
Aktualizujte Docker a containerd na kompatibilní verze, načtěte potřebné moduly jádra (overlay, br_netfilter) a zkontrolujte podporu cgroups v2. Ověřte soubor daemon.json, odstraňte zastaralé soubory PID, spusťte systemctl daemon reload a poté restartujte Docker. Přečtěte si protokoly deníku, abyste odhalili zbývající neshody.
Je bezpečné používat Docker System Prune v produkčním prostředí?
Ano, pokud rozumíte, co se odstraňuje. Příkaz Prune odstraní nepoužívané kontejnery, sítě, volné image a volitelně všechny nepoužívané image. Nikdy neprovádějte prořezávání během nasazení a vždy nejprve ověřte systémovou strukturu Docker. U kriticky důležitých hostitelů naplánujte údržbová okna a uchovávejte zálohy.