Вопрос или проблема
Когда я выполняю следующее на машине:
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-сервера в вашей компании. Как вы уже выяснили, это может значительно повлиять на производительность, особенно при выполнении сетевых операций, таких как аутентификация и управления образами.
Вот шаги, которые вы предприняли для решения проблемы:
-
Выявление проблемы с DNS: Вы заметили, что команды
docker login
иdocker manifest inspect
выполняются быстро на хост-машине, но значительно замедляются внутри контейнера. Это может быть признаком того, что контейнер использует нестабильный или неправильно настроенный DNS-сервер. -
Редактирование конфигурации Docker: Вы внесли изменения в файл конфигурации
daemon.json
, оставив только адрес DNS-сервера Google (8.8.8.8). Это позволяет обойти проблемы, связанные с вашим корпоративным DNS.sudo vim /etc/docker/daemon.json
Убедитесь, что в файле
daemon.json
содержится только строка:{ "dns": ["8.8.8.8"] }
-
Перезапуск службы Docker: После внесения изменений в конфигурацию необходимо перезапустить службу Docker, чтобы изменения вступили в силу.
sudo service docker restart
-
Проверка производительности: После выполнения вышеописанных шагов вы проверили производительность команд внутри контейнера, и они стали выполняться быстро, как и на хосте.
Если вы сталкиваетесь с подобными проблемами в будущем, всегда рекомендуется проверить настройки DNS, так как они могут влиять на сетевые запросы, особенно при работе с удалёнными реестрами образов. Если ваши проблемы с DNS продолжаются, может быть разумно обратиться к вашему системному администратору для дальнейшего расследования.
Таким образом, корректная настройка DNS является важным аспектом для обеспечения высокой производительности работы с Docker и его командами.