Learning Platform
Глоссарий Troubleshooting
Урок 04.04 · 16 мин
Начальный
dockerdiagnosticstroubleshooting

Первые проверки

После установки полезно сразу пройти несколько команд, чтобы убедиться, что всё работает, и заодно увидеть, что у тебя за runtime, какая версия, какой storage driver. Эти команды — твой базовый диагностический набор. Когда что-то пойдёт не так через два месяца, ты вернёшься к ним.

В этом уроке пробежим: docker version, docker info, docker run hello-world, docker context ls. И в конце — что делать, если daemon не отвечает.


Базовый диагностический цикл

Четыре команды для проверки рабочего состояния
docker versionПокажет версии CLI и Server. Самая быстрая проверка что docker вообще установлен и daemon отвечает
docker infoПодробный отчёт: storage driver, cgroup version, runtime, число образов, состояние swarm. Главный диагностический инструмент
docker run hello-worldEnd-to-end проверка: скачать образ из Docker Hub, запустить контейнер, увидеть вывод. Если работает — у тебя рабочий Docker
docker context lsСписок доступных движков. Полезно, если установлено несколько runtime'ов или ты подключаешься к удалённому Docker через SSH

docker version

Самая быстрая проверка. Выводит версии клиента и сервера.

docker version

Пример вывода:

Client:
 Version:           28.0.1
 API version:       1.45
 Go version:        go1.22.5
 Git commit:        abc1234
 Built:             Mon Mar 03 12:00:00 2026
 OS/Arch:           darwin/arm64
 Context:           orbstack

Server: Docker Engine - Community
 Engine:
  Version:          28.0.1
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.22.5
  Git commit:       def5678
  Built:            Mon Mar 03 12:00:00 2026
  OS/Arch:          linux/arm64
  Experimental:     false

Что важно:

  • OS/Arch у Client и Server разный. На mac client это darwin/arm64, server — linux/arm64. Это потому что сервер крутится в Linux VM (через OrbStack или Docker Desktop).
  • API version. Если client старше server’а — могут не работать новые фичи. Если client новее — обычно работает обратная совместимость.
  • Context: orbstack. Это активный context. Если у тебя несколько runtime’ов, тут видно с каким говоришь.

Если ты получаешь:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

— значит daemon не запущен. Перейди в раздел «daemon не отвечает» внизу урока.


docker info

Это главный диагностический инструмент. Выводит развёрнутый отчёт о состоянии Docker.

docker info

Вывод длинный, разберём важные секции:

Server:
 Containers: 5
  Running: 2
  Paused: 0
  Stopped: 3
 Images: 23
 Server Version: 28.0.1
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: abc...
 runc version: 1.1.x
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.6.0-orbstack
 Operating System: OrbStack Linux
 OSType: linux
 Architecture: aarch64
 CPUs: 8
 Total Memory: 8GiB

Что смотреть:

  • Storage Driver. Должен быть overlay2. Это эффективный driver на основе overlayfs. Если видишь vfs — что-то не так, файловая система не поддерживает overlay.
  • Cgroup Version. Должен быть 2. v1 — старая, на современных системах не нужна.
  • Runtimes. Должно быть runc как default. Если видишь gvisor или kata — у тебя нестандартная конфигурация.
  • Kernel Version. На mac/Win это будет Linux-kernel внутри VM. На Linux — kernel хоста. Должен быть 5.10+.
  • Operating System. На mac OrbStack — OrbStack Linux. Docker Desktop — Docker Desktop. На Linux — реальная ОС хоста.
  • CPUs / Total Memory. На mac это ресурсы, выделенные VM. Если показывает 4 CPU и 2 GB RAM — это явно мало, в settings своего runtime поставь больше.

Полезный фильтр:

docker info --format '{{.ServerVersion}} {{.Driver}} {{.CgroupVersion}}'
# 28.0.1 overlay2 2

Или JSON, чтобы скриптовать:

docker info --format '{{json .}}' | jq '.ServerVersion, .Driver, .CgroupVersion'

docker run hello-world

End-to-end проверка. Эта команда делает несколько вещей подряд:

  1. Проверяет, есть ли образ hello-world локально.
  2. Если нет — скачивает с Docker Hub.
  3. Создаёт контейнер из этого образа.
  4. Запускает его.
  5. Контейнер выводит сообщение и завершается.
docker run --rm hello-world

Флаг --rm нужен, чтобы контейнер автоматически удалился после завершения (иначе он останется в состоянии exited, и потом будет копиться мусор).

Ожидаемый вывод:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
abc1234: Pull complete
Digest: sha256:def5678...
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Если эта команда отработала — у тебя рабочий Docker. Это значит:

  • CLI работает.
  • Daemon отвечает.
  • Сеть позволяет ходить на Docker Hub (важно — в корпоративных сетях это иногда блокировано).
  • Storage driver работает (overlay2).
  • Runtime запускает контейнеры.

docker context

Контексты — это разные «адреса» Docker daemon’а, с которыми может работать CLI. У тебя может быть:

  • default — daemon на хосте (через /var/run/docker.sock).
  • orbstack — OrbStack runtime.
  • desktop-linux — Docker Desktop.
  • production-server — удалённый Docker через SSH на твоём сервере.
docker context ls

Пример:

NAME              DESCRIPTION                               DOCKER ENDPOINT
default *         Current DOCKER_HOST based configuration   unix:///var/run/docker.sock
orbstack          OrbStack                                  unix:///Users/me/.orbstack/run/docker.sock
desktop-linux     Docker Desktop                            unix:///Users/me/.docker/run/docker.sock

Звёздочка — активный.

Переключение:

docker context use orbstack

Создание контекста для удалённого сервера через SSH:

docker context create prod --docker "host=ssh://[email protected]"
docker context use prod
docker ps
# покажет контейнеры на prod.example.com

Это полезно для admin-задач, но для daily-работы junior’у не нужно.


Storage driver — почему overlay2

VFS и как overlay-файловая система работает в ядре

overlay2 — стандартный driver на современном Linux. Он использует overlay-файловую систему ядра, которая позволяет «накладывать» несколько слоёв друг на друга. Подробно мы это разберём в модуле 6 («Слои и хранение»).

Если в docker info ты видишь vfs — это означает, что overlay2 не поддерживается твоей файловой системой. На большинстве Linux это ext4 или xfs — оба поддерживают. Если у тебя файловая система btrfs или zfs — drivers будут другие.

На mac с OrbStack — overlay2. На Docker Desktop — overlay2. Это норма.


Daemon не отвечает — что делать

Алгоритм когда docker не работает
permission deniedНа Linux: ты не в группе docker. Решение: sudo usermod -aG docker $USER, потом newgrp docker
Cannot connect to daemonDaemon не запущен. mac: open -a OrbStack/Docker. Linux: sudo systemctl start docker. Win: запустить Docker Desktop
DNS / networkdocker run hello-world зависает на pull. Проверь сеть, корпоративный прокси, политики firewall
Disk fullNo space left on device при run. docker system df, docker system prune -a. Освободи диск

permission denied

На Linux при docker ps:

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

Решение: добавь себя в группу docker:

sudo usermod -aG docker $USER
newgrp docker
docker ps

Cannot connect to daemon

Daemon не запущен.

  • macOS OrbStack: open -a OrbStack.
  • macOS Docker Desktop: open -a Docker.
  • Linux: sudo systemctl start dockersudo systemctl enable docker, чтобы стартовал автоматом).
  • Windows: запусти Docker Desktop через меню Пуск.

Проверь, что daemon запустился:

docker version

Сетевые проблемы при pull

Если docker run hello-world зависает на «Pulling from library/hello-world», скорее всего проблема с DNS или прокси:

  • Проверь ping registry-1.docker.io.
  • Если в корпоративной сети — может быть HTTP-прокси, который надо настроить в Docker.
  • В Docker Desktop / OrbStack настройка прокси в Settings -> Proxies.
  • На Linux — /etc/systemd/system/docker.service.d/http-proxy.conf.

Disk full

docker run валится с no space left on device — у тебя кончился диск (на mac — диск VM, на Linux — диск хоста). Освобождение:

docker system df              # сколько занято
docker system prune -a --volumes  # удалить всё неиспользуемое

Эта команда удаляет неиспользуемые образы, контейнеры, сети, volumes. Будь осторожен — если у тебя в volumes лежит важная база, не удаляй.


Попробуй сам

Открой терминал и выполни:

docker version
docker info | grep -E '(Server Version|Storage Driver|Cgroup Version|Operating System|Total Memory)'
docker run --rm hello-world
docker context ls

Все четыре команды должны отработать без ошибок. Если что-то падает — переходи в раздел «Daemon не отвечает».

Бонус-команда: посмотри, сколько у тебя ресурсов выделено:

docker run --rm alpine sh -c 'cat /proc/meminfo | head -3; nproc'

Это покажет память и число ядер, доступных контейнеру. На mac — это лимиты VM. На Linux — лимиты хоста.


Что дальше

В следующем модуле — первые контейнеры. Будем учиться запускать docker run, смотреть процессы через docker ps, заходить внутрь через docker exec, читать логи через docker logs. Это самый базовый цикл, который ты будешь делать каждый день.


Проверка знанийKnowledge check
Какие команды нужно запустить сразу после установки Docker, и что они проверяют?
ОтветAnswer
Базовый диагностический цикл — четыре команды. Первая, docker version, выводит версии CLI и Server: показывает, что docker установлен и daemon отвечает. На mac/Win нормально, что Client это darwin/arm64, а Server — linux/arm64, потому что Server крутится в Linux VM. Вторая, docker info, даёт развёрнутый отчёт: storage driver (должен быть overlay2), cgroup version (должна быть 2), runtime (runc), kernel version, выделенные ресурсы (CPU и Memory). Это главный диагностический инструмент. Третья, docker run --rm hello-world, делает end-to-end проверку: скачивает образ из Docker Hub, запускает контейнер, видит вывод. Если она работает — рабочий и CLI, и daemon, и сеть до registry, и storage. Флаг --rm удаляет контейнер после выхода, чтобы не копился мусор. Четвёртая, docker context ls, показывает доступные runtime-контексты (default, orbstack, desktop-linux). Активный помечен звёздочкой. Это полезно, если установлено несколько движков или ты подключаешься к удалённому Docker по SSH.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 5. Что показывает docker version, если на mac OS/Arch у Client и Server разный?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4