Инструкции Docker внутри Docker работают чрезвычайно медленно.

Вопрос или проблема

Когда я выполняю следующее на машине:

docker login myacr -u xxx -p xxx
docker manifest inspect myacr.azurecr.io/someimage:yyy

Обе команды выполняются быстро, менее 1 секунды.

Но когда я запускаю внутри контейнера:

docker run -v "/var/run/docker.sock":"/var/run/docker.sock" -it someImage /bin/bash
root@e66b0aa7abd5:/# docker login myacr -u xxx -p xxx 
root@e66b0aa7abd5:/# docker manifest inspect myacr.azurecr.io/someimage:yyy

Команда docker manifest занимает много времени. В чем может быть причина этого дополнительного времени?

Нашел проблему. Сервер DNS был виноват. То, что в моей компании, работает некорректно, или, по крайней мере, так кажется.

Я отредактировал daemon.json, удалил все, кроме 8.8.8.8, и перезапустил службу Docker.

sudo vim /etc/docker/daemon.json
sudo service docker restart

Теперь производительность идеальна.

Ответ или решение

Ваша проблема с замедленным выполнением команд Docker внутри контейнера, вероятнее всего, была связана с неправильной работой DNS-сервера в вашей компании. Как вы уже выяснили, это может значительно повлиять на производительность, особенно при выполнении сетевых операций, таких как аутентификация и управления образами.

Вот шаги, которые вы предприняли для решения проблемы:

  1. Выявление проблемы с DNS: Вы заметили, что команды docker login и docker manifest inspect выполняются быстро на хост-машине, но значительно замедляются внутри контейнера. Это может быть признаком того, что контейнер использует нестабильный или неправильно настроенный DNS-сервер.

  2. Редактирование конфигурации Docker: Вы внесли изменения в файл конфигурации daemon.json, оставив только адрес DNS-сервера Google (8.8.8.8). Это позволяет обойти проблемы, связанные с вашим корпоративным DNS.

    sudo vim /etc/docker/daemon.json

    Убедитесь, что в файле daemon.json содержится только строка:

    {
     "dns": ["8.8.8.8"]
    }
  3. Перезапуск службы Docker: После внесения изменений в конфигурацию необходимо перезапустить службу Docker, чтобы изменения вступили в силу.

    sudo service docker restart
  4. Проверка производительности: После выполнения вышеописанных шагов вы проверили производительность команд внутри контейнера, и они стали выполняться быстро, как и на хосте.

Если вы сталкиваетесь с подобными проблемами в будущем, всегда рекомендуется проверить настройки DNS, так как они могут влиять на сетевые запросы, особенно при работе с удалёнными реестрами образов. Если ваши проблемы с DNS продолжаются, может быть разумно обратиться к вашему системному администратору для дальнейшего расследования.

Таким образом, корректная настройка DNS является важным аспектом для обеспечения высокой производительности работы с Docker и его командами.

Оцените материал
Добавить комментарий

Капча загружается...