Как заставить 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" (раздел "Запуск Docker"). Когда я делаю это, мне сначала сообщают, что docker не установлен (как показано в нижней части учебника), а затем, после того, как я получил его с помощью apt-get install docker, я получаю "Ошибка сегментации или обнаружена критическая ошибка. ядро и прерывание. "

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

1 ответ

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

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

TLDR; увидеть проект 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 на вашей Windows.
В настоящее время поставляется с:

  • Boot2Docker 1.5.0 (Docker v1.5.0, Linux v3.18.5)
  • Инструмент управления Boot2Docker 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 и введете сеанс DOS cmd boot2docker start или же stop,


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

Главное, что нужно понять, это то, что вам нужно управлять 2-мя ХОСТАМИ:

  • ваша рабочая станция 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 для обнаружения новых версий 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,
    • учетная запись докера (устанавливается в /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 / Файл / Настройки / Расширение / добавьте Oracle_VM_VirtualBox_Extension_Pack-4.x.yy-zzzzz.vbox-extpack файл).

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


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

Последнее, что нужно понять, это то, что по умолчанию ни один порт не экспортируется:

  • порты вашего контейнера не видны с вашего хоста Tiny Core (вы должны использовать -p 80:80 например, чтобы выставить порт 80 контейнера на порт 80 сеанса Linux)
  • порты Tiny Cort не экспортируются из виртуальной машины Virtual Box по умолчанию: даже если ваш контейнер виден из 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" $*, а затем: - если виртуальная коробка boot2docker-vm 'еще не запущен, использует vbm modifyvm - если виртуальная коробка 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 и учетную запись Docker

Для того, чтобы использовать boot2docker без труда:

  • создать на винде папку %USERPROFILE%\prog\b2d
  • добавить .profile в нем (прямо в винде, в %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 сценарий в вашем %PATH% который будет:
    • Начните 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

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


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

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

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


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

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

Может быть, прокси моей компании не позволяет https. Вот мой обходной путь:

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