kapitola 5

Chyby, které jsme si už zažili

Krátká diagnostika podle reálných problémů, na které jsme během cvičení narazili.

Docker: permission denied

docker ps
permission denied while trying to connect to the docker API at unix:///var/run/docker.sock

Diagnostika:

ls -l /var/run/docker.sock

Typicky je socket root:docker. Řešení v našem setupu:

sudo docker ps

docker build: chybí build context

sudo docker build -t docker-tahak:v1

Chyba:

docker: 'docker buildx build' requires 1 argument

Správně:

sudo docker build -t docker-tahak:v1 .

Poslední . znamená aktuální adresář a slouží jako build context.

Docker se pokouší stáhnout můj image z Docker Hubu

Například:

sudo docker run docker-vps-tahak

Docker odpoví:

Unable to find image 'docker-vps-tahak:latest' locally
pull access denied ...

Docker lokálně nenašel image s přesným jménem docker-vps-tahak:latest, a proto jej automaticky začal hledat ve výchozím registry.

Pokud jsme image vybuildili jako:

docker-tahak:v1

musíme použít právě:

sudo docker run ... docker-tahak:v1

Container má správné jméno, ale běží v něm špatný web

Jméno containeru a image jsou dvě nezávislé věci.

sudo docker run \
  --name docker-tahak \
  -p 127.0.0.1:8081:80 \
  -d nginx

Container se sice jmenuje docker-tahak, ale vznikl z image nginx.

Správně:

sudo docker run \
  --name docker-tahak \
  --restart unless-stopped \
  -p 127.0.0.1:8081:80 \
  -d docker-tahak:v1

Nginx: Too many levels of symbolic links

Chybný link:

tahak.kekor.cz -> tahak.kekor.cz

Symlink ukazuje sám na sebe a vznikne nekonečný cyklus.

sudo rm /etc/nginx/sites-enabled/tahak.kekor.cz

sudo ln -s \
  /etc/nginx/sites-available/tahak.kekor.cz \
  /etc/nginx/sites-enabled/tahak.kekor.cz

sudo nginx -t

Port 80 už používá systémový nginx

sudo docker run -p 80:80 nginx

Selže:

failed to bind host port 0.0.0.0:80/tcp: address already in use

Proto backend publikujeme třeba na 8080:

-p 127.0.0.1:8080:80

Neúspěšný docker run může zanechat container ve stavu Created

sudo docker ps -a

Odstranění:

sudo docker rm JMENO_CONTAINERU

Git: not a git repository

fatal: not a git repository (or any of the parent directories): .git

Nejčastěji stojíš v jiném adresáři. Po SSH loginu se typicky vrátíš do ~, ne do projektu.

pwd
ls -la
cd ~/docker-static
git status

GitHub SSH: Permission denied (publickey)

Klíč může existovat, ale GitHub ho nezná nebo SSH používá jiný identity file.

ssh -i ~/.ssh/id_ed25519_github -T git@github.com

Na Windows lze zkontrolovat výslednou SSH konfiguraci:

ssh -G github.com | Select-String "hostname|user|identityfile|identitiesonly"

Git diff otevřel pager less

Když dole vidíš (END), jsi v less. Návrat do shellu: q.

Bez pageru:

git --no-pager diff --cached

Nginx změny se neprojevily

Po editaci konfigurace:

sudo nginx -t
sudo systemctl reload nginx

Web po rebootu vrací 502

Zkontrolovat:

systemctl status nginx
systemctl status docker
sudo docker ps
curl http://127.0.0.1:8080

Pokud container neběží, systémový nginx nemá kam proxyovat a může vrátit 502 Bad Gateway.

Rychlá diagnostická pyramida

1. DNS └─ resolves doména správně? 2. port / nginx └─ curl -I http(s)://domena 3. reverse proxy └─ nginx -t └─ systemctl status nginx 4. backend na localhostu └─ curl http://127.0.0.1:8080 5. Docker └─ docker ps └─ docker logs CONTAINER 6. image / build └─ docker image ls └─ docker build ...