apt-get in docker за корпоративным прокси

Я пытаюсь настроить среду разработки за корпоративным прокси-сервером с помощью Docker. Как бы я ни старался, я не могу заставить контейнер docker разговаривать с прокси-сервером.

прокси-сервер и apt-get отлично работают на хосте, который является Ubuntu 12.04

первое, что делается в Dockerfile пытается настроить переменные прокси:

FROM ubuntu
RUN echo 'Acquire::http { Proxy "http://my.proxy.net:8000"; };' >> /etc/apt/apt.conf.d/01proxy
ENV HTTP_PROXY http://my.proxy.net:8000
ENV http_proxy http://my.proxy.net:8000
ENV HTTPS_PROXY https://my.proxy.net:8000
ENV https_proxy https://my.proxy.net:8000
RUN apt-get update && apt-get install -y build-essential

он отлично тянет изображение, устанавливает переменные, но когда он попадает в apt-get update, он пытается некоторое время, а затем терпит неудачу с:

W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease  
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease  
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease  
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg  Could not resolve 'my.proxy.net'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/Release.gpg  Could not resolve 'my.proxy.net'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/Release.gpg  Could not resolve 'my.proxy.net'
W: Some index files failed to download. They have been ignored, or old ones used instead.

эти переменные, которые я установил, соответствуют установке host linux (Ubuntu 12.04 на VirtualBox, если это имеет значение)

у меня также есть /etc/default/docker, настроенный с:

export http_proxy="http://my.proxy.net:8000"
export http_proxy="https://my.proxy.net:8000"

какие мысли?

обновление:

похоже, что это проблема с DNS, не обязательно прокси-сервером. Хост /etc / resolve.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 127.0.0.1
search dhcp.mycompany.com

хост является виртуальной машиной virtualbox работает на Windows 7, и я нашел различные половинчатые решения, которые в основном, кажется, не работает. Независимо от того, что я пытаюсь, я не могу заставить его разрешить имя хоста прокси-сервера

4 ответов


проблема оказалась с DNS. Docker работает на Ubuntu, который сам по себе является гостевой ОС на VirtualBox. Из-за своего virutalizing Мумбо-Юмбо, он назначен сервер 127.0.0.1 в файл resolv.conf.

когда это произойдет, Docker назначит себе DNS-сервер имен 8.8.8.8 (сервер имен google), поскольку localhost ссылается на контейнер docker, а не на хост.

чтобы исправить это, я прошел весь путь до окон и побежал

ipconfig /all

и получил IP-адрес моих ноутбуков DNS-серверов. Я добавил их в DOCKER_OPTS в файле конфигурации с --dns=my.служба DNS.интеллектуальная собственность.адрес и перезапущенный докер, и другие меры, которые я принял, чтобы пройти через прокси, работали нормально.


Если вы находитесь за брандмауэром, вы должны использовать Docker 1.9.X build-args.

построение файла Dockerfile без ошибок сборки и блоков следующим образом:

3b0d8aa7c417: Pull complete
Digest: sha256:dc31e6056d314218689f028b51a58b2ca69b1dfdc5f33ead52b9351e9a19ee85
Status: Downloaded newer image for nodesource/trusty:4.2.3
 ---> e17bee681d8f
Step 2 : RUN apt-get update
 ---> Running in bdaf0006ccbd

Apt-get блоки здесь, потому что он не имеет связи с archive.ubuntu.com... вы можете проверить это, запустив изображение...

# docker run -ti --net=host --rm nodesource/trusty:4.2.3 bash
root@pppdc9prd9rj:/usr/src/app# apt-get update
0% [Connecting to archive.ubuntu.com (91.189.92.201)]^C
root@pppdc9prd9rj:/usr/src/app# ping archive.ubuntu.com
PING archive.ubuntu.com (91.189.91.24) 56(84) bytes of data.
^C
--- archive.ubuntu.com ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 1999ms

использование build-arg решает проблему....

# docker build -t migrator --build-arg http_proxy=$HTTP_PROXY .

arg http_proxy=$HTTP_PROXY .
Sending build context to Docker daemon 3.333 MB
Step 1 : FROM nodesource/trusty:4.2.3
 ---> e17bee681d8f
Step 2 : RUN apt-get update
 ---> Running in 019b32d09a77
Ign http://archive.ubuntu.com trusty InRelease
Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]
Get:2 http://archive.ubuntu.com trusty-security InRelease [65.9 kB]
Get:3 http://archive.ubuntu.com trusty Release.gpg [933 B]
Get:4 http://archive.ubuntu.com trusty Release [58.5 kB]
Get:5 http://archive.ubuntu.com trusty-updates/main Sources [326 kB]
Get:6 http://archive.ubuntu.com trusty-updates/restricted Sources [5217 B]
Get:7 http://archive.ubuntu.com trusty-updates/universe Sources [1

несколько комментариев, после мой собственный опыт:

  • убедитесь, что для HTTPS_PROXY используется HTTP url.
  • используйте строчные переменные прокси в сам Dockerfile
  • используйте переменные прокси обоих случаев в профиль docker (в моем случае, это было в /var/lib/boot2docker/profile)
  • во всех случаях, установить no_proxy/NO_PROXY переменная (to .company,.sock,localhost,127.0.0.1,::1)
  • не забудьте включить учетные данные в url-адресе прокси-сервера, если ваш прокси-сервер запрашивает аутентификацию.

добавляя к вышеуказанному решению, мы также можем сделать следующие вещи внутри контейнера, чтобы установить с помощью apt-get

в VM после установки docker при запуске изображений в контейнере с помощью параметров прокси-сервера

docker run-it ubuntu: 14.04

apt-get install wget

эта команда не сможет вытащить пакеты из apt-get, для этого используйте команду ниже

docker run-it --net=хост ubuntu: 14.04

"экспорт" при="прокси:порт"

apt-get install wget