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.