Проблема с подключением Docker: apt / apk не работают внутри контейнера Docker и во время сборки Docker - PullRequest
0 голосов
/ 09 марта 2019

Я два дня борюсь со следующей проблемой. Системы управления пакетами дают сбой, когда я пытаюсь запустить их для создания нового образа контейнера, я пробовал с alpine: latest и ubuntu: latest. Я получаю такое же поведение, если пытаюсь использовать их из работающего контейнера, даже если я использую опцию --network host.

Например, если я пытаюсь построить следующий контейнер:

FROM alpine:latest
RUN apk update

как это:

docker build --no-cache -t test .

Я получаю:

ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.9/main: could not connect to server (check repositories file)
WARNING: Ignoring APKINDEX.b89edf6e.tar.gz: No such file or directory
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.9/community: could not connect to server (check repositories file)
WARNING: Ignoring APKINDEX.737f7e01.tar.gz: No such file or directory

и с Ubuntu:

FROM ubuntu:latest
RUN apt-get update

Я получаю:

Sending build context to Docker daemon  3.954MB
Step 1/2 : FROM ubuntu:latest
---> 47b19964fb50
Step 2/2 : RUN apt-get update
---> Running in 4c637396e7be
Err:1 http://archive.ubuntu.com/ubuntu bionic InRelease
Could not connect to 127.0.0.1:3000 (127.0.0.1). - connect (111:Connection refused)
Err:2 http://security.ubuntu.com/ubuntu bionic-security InRelease
Could not connect to 127.0.0.1:3000 (127.0.0.1). - connect (111:Connection refused)
Err:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
Unable to connect to 127.0.0.1:3000:
Err:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease
Unable to connect to 127.0.0.1:3000:
Reading package lists...
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic/InRelease  Could not connect to 127.0.0.1:3000 (127.0.0.1). - connect (111: Connection refused)
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic-updates/InRelease  Unable to connect to 127.0.0.1:3000:
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic-backports/InRelease  Unable to connect to 127.0.0.1:3000:
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease  Could not connect to 127.0.0.1:3000 (127.0.0.1). connect (111: Connection refused)
W: Some index files failed to download. They have been ignored, or old ones used instead.
Removing intermediate container 4c637396e7be
---> e41da39b1a0d
Successfully built e41da39b1a0d
Successfully tagged test:latest

Я работаю с Docker версии 18.09.3, сборка 774a1f4, на хосте Ubuntu 16.04. Моя система работает за маршрутизатором. Я уже попробовал стратегии, предложенные в этом ответе, а также в этом ответе, но безуспешно. Еще более странно, если я пингую от adiazmor / docker-ubuntu-with-ping, как указано ниже:

  docker run --rm -it adiazmor/docker-ubuntu-with-ping
root@a774331799d3:/# ping google.com
PING google.com (216.58.205.46): 56 data bytes
64 bytes from 216.58.205.46: icmp_seq=0 ttl=53 time=44.976 ms
64 bytes from 216.58.205.46: icmp_seq=1 ttl=53 time=43.661 ms
64 bytes from 216.58.205.46: icmp_seq=2 ttl=53 time=43.471 ms
64 bytes from 216.58.205.46: icmp_seq=3 ttl=53 time=44.066 ms
64 bytes from 216.58.205.46: icmp_seq=4 ttl=53 time=43.849 ms

Работает, но тогда обновление apt-get завершается неудачно, как и раньше. У меня заканчиваются идеи. Любая помощь приветствуется.

Обновление: Похоже, что некоторые контейнеры могут найти правильный DNS-сервер, а другие нет.

Действительно, если я бегу:

docker run --rm -i busybox nslookup google.com

Не работает:

Unable to find image 'busybox:latest' locallylatest: Pulling from library/busybox
697743189b6d: Pull complete 
Digest: sha256:061ca9704a714ee3e8b80523ec720c64f6209ad3f97c0ff7cb9ec7d19f15149f
Status: Downloaded newer image for busybox:latest
Server:         8.8.8.8
Address:        8.8.8.8:53

Non-authoritative answer:
Name:   google.com
Address: 2a00:1450:4002:807::200e

*** Can't find google.com: No answer

но если я бегу:

docker run --rm -it tutum/dnsutils nslookup google.com

работает:

Unable to find image 'tutum/dnsutils:latest' locally
latest: Pulling from tutum/dnsutils
a3ed95caeb02: Pull complete 
0d4f8675aa34: Pull complete 
7cf67d95acf6: Pull complete 
56692d2aae61: Pull complete 
349ad02ed73a: Pull complete 
Digest: sha256:d2244ad47219529f1003bd1513f5c99e71655353a3a63624ea9cb19f8393d5fe
Status: Downloaded newer image for tutum/dnsutils:latest
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   google.com
Address: 216.58.205.78

1 Ответ

0 голосов
/ 10 марта 2019

Обновление: основная причина проблемы была в моей локальной конфигурации пользователя (/home/myuser/.docker/config.json), действительно, он устанавливал прокси по умолчанию на 127.0.0.1:3000.

Хорошо, я нашел проблему, по крайней мере, для Ubuntu, она была все время передо мной. Хотите верьте, хотите нет, но официальный образ Ubuntu поставляется с http_proxy и HTTP_PROXY, установленными на 127.0.0.1:3000. На самом деле я только что проверил это изменение в своем Dockerfile.ubuntu:

FROM ubuntu:latest
RUN echo $HTTP_PROXY && echo $http_proxy && unset HTTP_PROXY && unset http_proxy && apt-get update

и работает нормально:

$ docker build --no-cache -f Dockerfile.ubuntu .
Sending build context to Docker daemon  3.956MB
Step 1/2 : FROM ubuntu:latest
 ---> 47b19964fb50
Step 2/2 : RUN echo $HTTP_PROXY && echo $http_proxy && unset HTTP_PROXY && unset http_proxy && apt-get update
 ---> Running in bc697aa04846
http://127.0.0.1:3000
http://127.0.0.1:3000
Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:4 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [358 kB]
Get:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:6 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [3910 B]
Get:7 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [5436 B]
Get:8 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [157 kB]
Get:9 http://archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB]
Get:10 http://archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [186 kB]
Get:11 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [11.3 MB]
Get:12 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB]
Get:13 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [10.8 kB]
Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [946 kB]
Get:15 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [6966 B]
Get:16 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [708 kB]
Get:17 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [3650 B]
Fetched 15.6 MB in 10s (1578 kB/s)
Reading package lists...
Removing intermediate container bc697aa04846
 ---> 0b6a1f333528
Successfully built 0b6a1f333528

Тем не менее, это кажется мне нарушением принципа изоляции, но, может быть, есть веская причина, и я хотел бы знать, кто-нибудь может прояснить, почему эти две переменные env установлены по умолчанию?

Обновление:

Проблема была такой же и в альпийском.

...