Как заставить 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
Команда требует доступа в интернет.
- сервис Docker, чтобы иметь возможность запрашивать / загружать изображения (например:
Хороший 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