У меня установлена чистая Ubuntu MATE 16.04.6 LTS.
Я установил Docker из репозитория здесь с:
sudo apt-get install docker.io
и добавил моего пользователя в группу docker
с
sudo usermod -a -G docker $USER
, затем я загрузил контейнер Ubuntu 19.04 с
docker pull ubuntu:19.04
и попытался запустить apt update
внутри него
docker run -it ubuntu:19.04 apt update
, но получил сетевые ошибки:
$ docker run -it ubuntu:19.04 apt update Err:1 http://archive.ubuntu.com/ubuntu disco InRelease Temporary failure resolving 'archive.ubuntu.com' Err:2 http://security.ubuntu.com/ubuntu disco-security InRelease Temporary failure resolving 'security.ubuntu.com' Err:3 http://archive.ubuntu.com/ubuntu disco-updates InRelease Temporary failure resolving 'archive.ubuntu.com' Err:4 http://archive.ubuntu.com/ubuntu disco-backports InRelease Temporary failure resolving 'archive.ubuntu.com' Reading package lists... Done Building dependency tree Reading state information... Done All packages are up to date. W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/disco/InRelease Temporary failure resolving 'archive.ubuntu.com' W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/disco-updates/InRelease Temporary failure resolving 'archive.ubuntu.com' W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/disco-backports/InRelease Temporary failure resolving 'archive.ubuntu.com' W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/disco-security/InRelease Temporary failure resolving 'security.ubuntu.com' W: Some index files failed to download. They have been ignored, or old ones used instead.
Внутренний контейнер /etc/resolv.conf
выглядит следующим образом:
$ docker run -it ubuntu:19.04 cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 8.8.8.8 nameserver 8.8.4.4
В хост-системе есть Интернет, NetworkManager используется с настройками по умолчанию:
$ cat /etc/NetworkManager/NetworkManager.conf [main] plugins=ifupdown,keyfile,ofono dns=dnsmasq [ifupdown] managed=false
все файлы в системе без изменений - команда debsums --changed --all --silent
ничего не возвращает.
Запрошенные выходные данные iptables -S
приведены ниже:
$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
Какие настройки следует изменить, чтобы исправить DNS (разрешение имен) из контейнера Docker?
Примечания:
#dns=dnsmasq
), но я не хочу использовать эту опцию. ifupdown
. Таким образом, NetworkManager является корнем этой проблемы. Решение для docker run
очень просто - мы должны выбрать сеть узла с --network host
опция:
docker run -it --network host ubuntu:19.04 apt update
и затем проблема будет решена.
Но это также должно быть отмечено это docker build
имеет --network
опция, только начинающая только с 18.04 LTS. Таким образом, если нам нужно docker build --network host
для 16.04 LTS мы должны использовать docker-ce
пакет из docker.com.