Вопрос или проблема
Я заметил, что в командах sudo
моего Docker CI, например, time sudo xvfb-run coverage run -m pytest test/gui
, возникает ошибка следующего вида:
sudo: невозможно разрешить имя хоста runner-qwqjblm--project-1351-concurrent-1: Имя или служба не известны
Где runner-qwqjblm--project-1351-concurrent-1
является именем хоста экземпляра, то есть:
$ cat /etc/hostname
runner-qwqjblm--project-1351-concurrent-1
$ hostname
runner-qwqjblm--project-1351-concurrent-1
По моим исследованиям, подобные проблемы, похоже, возникают из-за неправильно настроенного файла /etc/hosts
. Мой выглядит так:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.1 host.docker.internal
Кроме того, что имя хоста не появляется в файле, я не знаю, что именно не так и как это исправить.
Ни одна из рекомендаций, которые я нашел в своем поиске, не подходит под эту схему.
Я нашел это здесь: просто добавьте имя runner-qwqjblm–project-1351-concurrent-1 в первую строку /etc/hosts
и сделайте ее
127.0.0.1 localhost runner-qwqjblm--project-1351-concurrent-1
Это сработало для меня.
Ответ или решение
Ошибка "sudo: unable to resolve host: Name or service not known"
Введение
Ошибка "sudo: unable to resolve host: Name or service not known" часто возникает в средах Linux, когда система не может сопоставить имя хоста с его IP-адресом. Ваша проблема, описанная в контексте использования Docker CI, связана с конфигурацией системы, в частности с файлом /etc/hosts
.
Причины проблемы
Система Linux использует файл /etc/hosts
для сопоставления имен хостов с IP-адресами. Если имя хоста не указано в этом файле, попытка выполнить команду с использованием sudo
, которая требует разрешения имени хоста, приведет к указанной ошибке.
Описание проблемы
Как вы указали, ваше текущее имя хоста:
$ cat /etc/hostname
runner-qwqjblm--project-1351-concurrent-1
При этом файл /etc/hosts
выглядит следующим образом:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.1 host.docker.internal
Данный файл не содержит упоминания о вашем имени хоста runner-qwqjblm--project-1351-concurrent-1
, что и приводит к ошибке.
Решение
Самое простое решение — добавить имя хоста в файл /etc/hosts
. Это позволит системе правильно разрешать имя хоста. Чтобы исправить эту проблему, вам нужно выполнить следующие шаги:
-
Откройте файл
/etc/hosts
с правами администратора:sudo nano /etc/hosts
-
Добавьте имя вашего хоста в первую строку. В результате первая строка должна выглядеть следующим образом:
127.0.0.1 localhost runner-qwqjblm--project-1351-concurrent-1
-
Сохраните изменения и закройте редактор.
Теперь ваш файл /etc/hosts
будет выглядеть так:
127.0.0.1 localhost runner-qwqjblm--project-1351-concurrent-1
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.1 host.docker.internal
Проверка решения
После внесения изменений вы можете протестировать, работает ли всё корректно, выполнив команду с sudo
:
sudo ls
Если ошибка не появляется, значит, проблема решена.
Заключение
Проблема "unable to resolve host" чаще всего вызывается отсутствием имени хоста в файле /etc/hosts
. Добавляя соответствующее имя в этот файл, вы сможете устранить проблему. Обязательно проверяйте конфигурацию всех связанных файлов после изменений системы, чтобы избежать подобных проблем в будущем.
Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за поддержкой.