Как заставить Docker работать в системе Windows за корпоративным брандмауэром?

Я пытаюсь получить рабочую установку докеров после этого учебника: http://docs.docker.io/en/latest/installation/windows/

До сих пор я запускал виртуальную машину с загруженным вручную репозиторием (следил за github-ссылкой и загружался как zip, потому что "git clone" не работал за моим корпоративным прокси, даже после настройки прокси с помощью git conf --global http.proxy... "- он продолжал просить меня аутентификации 407, хотя я ввел своего пользователя и PW). Теперь я в состоянии, в котором я должен использовать "docker run busybox echo hello world" (раздел "Запуск докера" ). Когда я это делаю, мне сначала говорят, что докер не установлен (как показано внизу учебника), а затем, после того как я получил его с apt-get install docker, я получаю "Ошибка сегментации или критическая ошибка. ядро и прерывание".

Что теперь делать? Это потому, что я не использовал клон git или что-то не так с установкой докера? Я где-то читал, что apt-get install docker не устанавливает докеры, которые я хочу, но какой-то GNOME-Tool, могу ли я указать свой apt-запрос, чтобы получить правильный инструмент?

Ответ 1

Windows Boot2Docker за корпоративным прокси

(Контекст: март 2015 г., Windows 7, за корпоративным прокси)

TL;DR; см. проект GitHub VonC/b2d:

Клонировать его и:

  • настроить ..\env.bat после env.bat.template,
  • добавьте псевдоним, который вы хотите в файле profile,
  • выполните senv.bat, затем b2d.bat.

Затем вы находитесь в специально настроенной среде boot2docker с:

  • сеанс ssh, способный получить доступ к интернету за корпоративным прокси при вводе docker search/pull.
  • Dockerfiles может получить доступ к интернету за корпоративным прокси, когда они делают apt-get update/install, и вы набираете docker build.

Установка и первые шаги

Если вы являетесь администратором своей рабочей станции, вы можете запустить boot2docker install в своей Windows.
В настоящее время он поставляется с:

  • Boot2Docker 1.5.0 (Docker v1.5.0, Linux v3.18.5)
  • Boot2Docker Management Tool v1.5.0
  • VirtualBox v4.3.20-r96997
  • msysGit v1.9.5-preview20141217

Затем, после установки:

  • добавить c:\path\to\Boot2Docker For Windows\ в %PATH%
  • (один раз): boot2docker init
  • boot2docker start
  • boot2docker ssh
  • введите exit для выхода из сеанса ssh и boot2docker ssh, чтобы вернуться: история команд, которые вы только что набрали, сохраняется.
  • если вы хотите закрыть виртуальную машину, boot2docker stop

Фактически вы можете увидеть запуск или остановку виртуальной машины, если вы откроете графический интерфейс Virtual Box и введите сеанс cmd в DOS boot2docker start или stop.


Хосты и прокси: Windows = > Boot2Docker = > Контейнеры докеров

Главное, чтобы понять, что вам нужно управлять 2 HOSTS:

  • Ваша рабочая станция Windows является хостом для Linux Tiny Core, выполняемая VirtualBox для определения и запуска контейнеров
    (%HOME%\.boot2docker\boot2docker.iso = >
    . %USERPROFILE%\VirtualBox VMs\boot2docker-vm\boot2docker-vm.vmdk),
  • Ваш boot2docker Linux Tiny Core - хост для ваших контейнеров, которые вы запустите.

В терминах прокси это означает:

  • Ваш Windows-хост должен установить переменную среды HTTP_PROXY, HTTPS_PROXY и NO_PROXY (вы, вероятно, уже имеете их, и они могут использоваться, например, виртуальным ящиком для обнаружения новых версий Virtual Box)
  • Ваш Tiny Core Host должен установить HTTP_PROXY, HTTPS_PROXY и NO_PROXY (обратите внимание на случай, строчный в среде Linux) для:
    • служба docker, чтобы иметь возможность запрашивать/загружать изображения (например: docker search nginx).
      Если не задано, следующий docker pull получит вам dial tcp: lookup index.docker.io: no such host.
      Это устанавливается в новом файле /var/lib/boot2docker/profile: это profile, а не .profile.
    • учетная запись docker (устанавливается в /home/docker/.ashrc), если вам нужно выполнить любую другую команду (кроме докера), которая потребует доступа в Интернет)
    • любой файл Dockerfile, который вы создадите (или следующий RUN apt-get update получит вам, например, Could not resolve 'http.debian.net').
      Это означает, что вы должны сначала добавить строки ENV http_proxy http://..., перед любой командой RUN, требующей доступа в Интернет.

Хороший NO_PROXY для установки:

.company,.sock,localhost,127.0.0.1,::1,192.168.59.103

(с '.company' доменное имя вашей компании, для внутренних сайтов)


Сохранение данных? Использовать общий доступ к папкам

Другой момент для понимания заключается в том, что boot2docker использует Tiny Core,... крошечный дистрибутив Linux (файл .iso - всего 26 МБ).
И Tiny Core не предлагает настойчивости (за исключением нескольких технических папок): если вы измените свой ~/.ashrc со всеми вашими предпочтительными настройками и псевдонимом... следующий boot2docker stop / boot2docker start восстановит первозданную среду Linux, с измененной версией.

Вы должны убедиться, что VirtualBox имеет Oracle_VM_VirtualBox_Extension_Pack, загруженный и добавленный в Virtual Box/File/Настройки/Расширение/добавление файла Oracle_VM_VirtualBox_Extension_Pack-4.x.yy-zzzzz.vbox-extpack).

Поскольку задокументирован в boot2docker, у вас будет доступ (от вашего сеанса Siny Core ssh) до /c/Users/<yourLogin> (т.е. %USERPROFILE% разделяется виртуальным ящиком)


Перенаправление портов? Для контейнера и для VirtualBox VM

Конечным моментом для понимания является то, что порт не экспортируется по умолчанию:

  • порты вашего контейнера не видны с вашего узла Tiny Core (например, вы должны использовать -p 80:80, чтобы открыть 80-й порт контейнера на 80-й порт сеанса Linux).
  • ваши порты Tiny Cort по умолчанию не экспортируются из виртуальной виртуальной машины: даже если ваш контейнер виден с Tiny Core, ваш браузер Windows не увидит его: http://127.0.0.1 не будет работать "The connection was reset".

Для первой точки docker run -it --rm --name my-apache-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4 не будет работать без -p 80:80 в ней.

Для второй точки определите псевдоним doskey vbm="c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" $*, а затем: - если Virtual Box 'boot2docker-vm' еще не запущен, используется vbm modifyvm- если Virtual Box 'boot2docker-vm' уже запущен, используется vbm controlvm

Как правило, если я понимаю, во время сеанса boot2docker, что порт 80 недоступен из Windows:

vbm controlvm "boot2docker-vm" natpf1 "tcp-port80,tcp,,80,,80";
vbm controlvm "boot2docker-vm" natpf1 "udp-port80,udp,,80,,80";

Тогда и только тогда я могу получить доступ к http://127.0.0.1


Постоянные настройки: копируются в службу докеров и учетную запись docker

Чтобы легко использовать boot2docker:

  • создать в Windows папку %USERPROFILE%\prog\b2d
  • добавьте в него .profile (непосредственно в Windows, в %USERPROFILE%\prog\b2d), с вашими настройками и псевдонимами.

Например (я изменил оригинал /home/docker/.ashrc):

# ~/.ashrc: Executed by SHells.
#
. /etc/init.d/tc-functions
if [ -n "$DISPLAY" ]
then
        `which editor >/dev/null` && EDITOR=editor || EDITOR=vi
else
        EDITOR=vi
fi
export EDITOR

# Alias definitions.
#
alias df='df -h'
alias du='du -h'

alias ls='ls -p'
alias ll='ls -l'
alias la='ls -la'

alias d='dmenu_run &'
alias ce='cd /etc/sysconfig/tcedir'

export HTTP_PROXY=http://<user>:<pwd>@proxy.company:80
export HTTPS_PROXY=http://<user>:<pwd>@proxy.company:80
export NO_PROXY=.company,.sock,localhost,127.0.0.1,::1,192.168.59.103

export http_proxy=http://<user>:<password>@proxy.company:80
export https_proxy=http://<user>:<password>@proxy.company:80
export no_proxy=.company,.sock,localhost,127.0.0.1,::1,192.168.59.103

alias l='ls -alrt'
alias h=history
alias cdd='cd /c/Users/<user>/prog/b2d'

ln -fs /c/Users/<user>/prog/b2d /home/docker

(192.168.59.103 обычно является ip, возвращаемым boot2docker ip)


Соединяя все вместе, чтобы запустить сеанс boot2docker: b2d.bat

  • создайте и добавьте b2d.bat script в свой %PATH%, который будет:
    • start boot2docker
    • скопируйте правильный профиль, как для службы docker (которая перезапускается), так и для учетной записи /home/docker.
    • инициировать интерактивную сессию ssh

То есть:

doskey vbm="c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" $*
boot2docker start
boot2docker ssh sudo cp -f /c/Users/<user>/prog/b2d/.profile /var/lib/boot2docker/profile
boot2docker ssh sudo /etc/init.d/docker restart
boot2docker ssh cp -f /c/Users/<user>/prog/b2d/.profile .ashrc
boot2docker ssh

Чтобы войти в новый сеанс boot2docker, с вашими настройками, определенными точно так, как вы хотите, просто введите:

b2d

И тебе хорошо идти:


Конечный результат:

  • a docker search xxx будет работать (он будет пользоваться Интернетом)
  • любой docker build будет работать (он будет обращаться к интернету, если существуют директивы ENV http_proxy)
  • любой файл Windows из %USERPROFILE%\prog\b2d можно изменить прямо с ~/b2d.
    Или вы действительно можете писать и изменять те же файлы (например, некоторые файлы Docker) прямо из сеанса Windows, используя ваш любимый редактор (вместо vi)

И все это, за корпоративным брандмауэром.


Бонус: только http

Tuan добавляет в комментариях:

Возможно, мой прокси-сервер не разрешает https. Вот мой способ:

  • boot2docker ssh
    убить процесс докера и
  • установите прокси export http_proxy=http://proxy.com, затем
  • начать докер с помощью docker -d --insercure-registry docker.io