- Docker Troubleshooting[+]
- [+]
- WSL: docker not running
- filesystem layer verification failed for digest
- tlsv1 alert protocol version
- pg_hba
- Package 'docker-ce' has no installation candidate
- Cannot connect to the Docker daemon
- The input device is not a TTY
- postgresql cannot create temp file for here-document: Permission denied
- Error response from daemon: manifest for IMAGES not found
- [+]
Docker Troubleshooting
WSL: docker not running
После обновления Ubuntu в WSL до версии 22.04 перестал запускать docker-демон. Переустановка докера не помогла.
sudo service docker start sudo service docker status # * Docker is not running
В журнале отображается ошибка
tail -f /var/log/docker.log | grep -i error # ... failed to start daemon: Error initializing network controller: error obtaining controller instance: unable to add return rule in DOCKER-ISOLATION-STAGE-1 chain: (iptables failed: iptables --wait -A DOCKER-ISOLATION-STAGE-1 -j RETURN: iptables v1.8.7 (nf_tables): RULE_APPEND failed (No such file or directory): rule in chain DOCKER-ISOLATIO N-STAGE-1
Найдено решение на странице https://github.com/microsoft/WSL/issues/6655
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
filesystem layer verification failed for digest
Вдруг перестали скачиваться образы из gitlab-репозитория.
filesystem layer verification failed for digest ...
Помогла перезаливка базового образа в docker registry. Кроме того, базовый образ не обновлялся на ci-сервере, что приводило к аналогичной ошибке даже после обновления образа в registry. По умолчанию gitlab-runner должен всегда скачивать образ (см. pull_policy https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnersdocker-section). Пришлось руками удалить базовый образ на ci-сервере и при очередном пайплайне он подтянулся и проблема ушла.
tlsv1 alert protocol version
После обновления сервера docker-compose на клиентской машине вдруг начал выдавать:
ERROR: SSL error: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:661)
Обновление пакетов ubuntu и версии руби результата не дали.
Помогла установка переменной окружения COMPOSE_TLS_VERSION:
COMPOSE_TLS_VERSION=TLSv1_2 docker-compose ... Name Command State Ports --------------------------------------------------------------------------------------------------------------------- elasticsearch /docker-entrypoint.sh elas ... Up 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp ...
Также помогает обновление версии docker-compose
pg_hba
docker compose postgres no pg_hba.conf entry for host ...
Если при запуске postgres в докере при подключении выдается вышеуказанная ошибка, то необходим сделать
docker volume prune
Package 'docker-ce' has no installation candidate
Если в процессе установки docker получаем сообщение
sudo apt-get update # E: Package 'docker-ce' has no installation candidate
То в первую очередь необходимо проверить разрядность
# если в пристутствует i386 или i686 - это 32 бита, # а если x86_64 - то 64 uname -a
Cannot connect to the Docker daemon
После обновления системы (sudo apt upgrade
) на сервере, на котором настроено удаленное управление докером, случилось следующее
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Диагностика ничего не говорит
adminisoit@ds4:~$ sudo systemctl restart docker.service Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. adminisoit@ds4:~$ systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: failed (Result: start-limit-hit) since Пт 2018-12-14 11:34:21 +04; 44ms ago Docs: https://docs.docker.com Process: 5600 ExecStart=/usr/bin/dockerd -H unix:// (code=exited, status=1/FAILURE) Main PID: 5600 (code=exited, status=1/FAILURE) дек 14 11:34:19 ds4 systemd[1]: Failed to start Docker Application Container Engine. дек 14 11:34:19 ds4 systemd[1]: docker.service: Unit entered failed state. дек 14 11:34:19 ds4 systemd[1]: docker.service: Failed with result 'exit-code'. дек 14 11:34:21 ds4 systemd[1]: docker.service: Service hold-off time over, scheduling restart. дек 14 11:34:21 ds4 systemd[1]: Stopped Docker Application Container Engine. дек 14 11:34:21 ds4 systemd[1]: docker.service: Start request repeated too quickly. дек 14 11:34:21 ds4 systemd[1]: Failed to start Docker Application Container Engine. дек 14 11:34:21 ds4 systemd[1]: docker.service: Unit entered failed state. дек 14 11:34:21 ds4 systemd[1]: docker.service: Failed with result 'start-limit-hit'.
При этом, если убрать строку hosts
из файла /etc/docker/daemon.json, а также удалить (переименовать) директорию /etc/systemd/system/docker.service.d/, то докер стартует корректно, однако мы лишаемся возможности им управлять удаленно.
Выявлено, что значения в поле hosts
в файле /etc/docker/daemon.json и опции вызова демона docker в файле /etc/systemd/system/docker.service.d/override.conf связаны или даже равнозначны.
Итоговое решение проблемы
- Удалено поле
hosts
из файла /etc/docker/daemon.json - Файл /etc/systemd/system/docker.service.d/override.conf переименован в /etc/systemd/system/docker.service.d/hosts.conf (НЕ ОБЯЗАТЕЛЬНО)
- Скорректирован файл hosts.conf
# Было [Service] ExecStart= ExecStart=/usr/bin/dockerd # Стало [Service] ExecStart= ExecStart=/usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:2376
- Перезапущен докер
sudo systemctl daemon-reload sudo systemctl restart docker.service
The input device is not a TTY
При запуске композа через CI выдается ошибка:
The input device is not a TTY
Решение здесь - https://github.com/docker/compose/issues/5696
Необходимо добавить переменную окружения в контекст исполнения
export COMPOSE_INTERACTIVE_NO_CLI=1
Для Ansible переменная окружения не помогает, т.к. возникает другая ошибка...
Альтернативное решение - это замена команды docker-compose exec
на docker exec
без опций -it
. Для того, чтобы обратиться к конкретному контейнеру из состава композа, можно воспользоваться опцией container_name
в docker-compose.yml
.
postgresql cannot create temp file for here-document: Permission denied
В какой-то момент, после долгого перерыва (включающего в себя обновление дистрибутива и установку vagrant), при попытке запустить контейнер postgresql выдавалась ошибка
... cannot create temp file for here-document: Permission denied
Помогла лишь переустановка докера и "перезаливка" образов
Error response from daemon: manifest for IMAGES not found
Причину выявить не удалось. Исправить не удалось. Решение - переустановка registry
docker run -d -p 5001:5000 \ --restart=always \ --name registry2 \ -v /etc/letsencrypt/live/registry.misuz.ru:/certs \ -v /opt/docker-registry-2:/var/lib/registry \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2.7.1