puede - ¿Cómo hacer que Docker se ejecute en un sistema Windows detrás de un firewall corporativo?
firewall de windows defender no puede cambiar algunas de las opciones de configuracion (1)
Windows Boot2Docker detrás del proxy corporativo
(Contexto: marzo de 2015, Windows 7, detrás del proxy corporativo)
TLDR; ver el proyecto GitHub VonC/b2d
:
Clonarlo y:
- configure
../env.bat
siguiendo elenv.bat.template
, - agregue el alias que desea en el archivo ''
profile
'', - ejecuta
senv.bat
luegob2d.bat
.
Entonces se encuentra en un entorno boot2docker
debidamente personalizado con:
- una sesión de SSH capaz de acceder a Internet detrás del proxy corporativo cuando escribe la
docker search/pull
. - Los archivos Docker pueden acceder a Internet detrás del proxy corporativo cuando hacen una
apt-get update/install
y usteddocker build
unadocker build
.
Instalación y primeros pasos
Si usted es el administrador de su estación de trabajo, puede ejecutar la instalación de boot2docker en su Windows .
Actualmente viene con:
- 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
Luego, una vez instalado:
- agregue
c:/path/to/Boot2Docker For Windows/
en su%PATH%
- (una vez):
boot2docker init
-
boot2docker start
-
boot2docker ssh
- escriba
exit
para salir de la sesión ssh yboot2docker ssh
para volver a entrar: se conserva el historial de comandos que acaba de escribir. - si quiere cerrar la máquina virtual,
boot2docker stop
De hecho, puede ver que la VM se inicia o se detiene si abre la GUI de Virtual Box y escribe una sesión de cmd de DOS boot2docker start
o stop
.
Hosts y Proxy: Windows => Boot2Docker => Docker Contenedores
El principal punto a entender es que necesitarás administrar 2 HOSTS :
- su estación de trabajo de Windows es el host del Linux Tiny Core ejecutado por VirtualBox para que pueda definir y ejecutar contenedores
(%HOME%/.boot2docker/boot2docker.iso
=>
.%USERPROFILE%/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk
), - Tu boot2docker Linux Tiny Core aloja tus contenedores que ejecutarás.
En términos de proxy , eso significa:
- Su Windows Host debe tener configurada su variable de entorno
HTTP_PROXY
,HTTPS_PROXY
yNO_PROXY
(probablemente ya las tenga, y pueden usarse, por ejemplo, en Virtual Box para detectar nuevas versiones de Virtual Box) - Su Tiny Core Host debe haber configurado
http_proxy
,https_proxy
yno_proxy
(tenga en cuenta el caso, minúsculas en el entorno Linux) para:- el servicio de acoplador para poder consultar / cargar imágenes (por ejemplo:
docker search nginx
).
Si no se establece, la siguientedocker pull
le proporcionará undial tcp: lookup index.docker.io: no such host
.
Esto se establece en un nuevo archivo/var/lib/boot2docker/profile
: esprofile
, not.profile
. - la cuenta
/home/docker/.ashrc
(que se establecerá en/home/docker/.ashrc
), si necesita ejecutar cualquier otro comando (que no sea Docker) que requeriría acceso a Internet) - cualquier archivo Docker que usted cree (o la próxima
RUN apt-get update
obtendrá un, por ejemplo,Could not resolve ''http.debian.net''
).
Eso significa que debe agregar las líneasENV http_proxy http://...
primero, antes deENV http_proxy http://...
cualquier comando deENV http_proxy http://...
requiera acceso a Internet.
- el servicio de acoplador para poder consultar / cargar imágenes (por ejemplo:
Un buen no_proxy
para establecer es:
.company,.sock,localhost,127.0.0.1,::1,192.168.59.103
(con '' .company
'' el nombre de dominio de su empresa, para los sitios internos)
Persistencia de datos? Usa el uso compartido de carpetas
El otro punto a entender es que boot2docker usa Tiny Core , una ... pequeña distribución de Linux (el archivo .iso tiene solo 26 MB).
Y Tiny Core no ofrece persistencia (excepto algunas carpetas técnicas): si modifica su ~/.ashrc
con todos sus ajustes preferidos y alias ... el siguiente boot2docker stop / boot2docker start
restaurará un entorno Linux prístino , con su modificación ido .
Debe asegurarse de que VirtualBox haya descargado y agregado Oracle_VM_VirtualBox_Extension_Pack en el cuadro virtual / Archivo / Configuración / Extensión / agregue el Oracle_VM_VirtualBox_Extension_Pack-4.x.yy-zzzzz.vbox-extpack
).
Tal como se documenta en boot2docker , tendrá acceso (desde su sesión Tiny Core ssh) a /c/Users/<yourLogin>
(es decir, el %USERPROFILE%
es compartido por Virtual Box)
Redirección de puertos? Para contenedor y para VirtualBox VM
El último punto a entender es que ningún puerto se exporta por defecto :
- sus puertos de contenedor no son visibles desde su host Tiny Core (debe usar
-p 80:80
por ejemplo para exponer el puerto 80 del contenedor al puerto 80 de la sesión de Linux) - sus puertos Tiny Cort no se exportan desde su Virtual Box VM de forma predeterminada : incluso si su contenedor es visible desde Tiny Core, su navegador de Windows no lo verá: http://127.0.0.1 no funcionará "
The connection was reset
".
Para el primer punto, docker run -it --rm --name my-apache-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
no funcionará sin -p 80:80
en eso.
Para el segundo punto, defina un alias doskey vbm="c:/Program Files/Oracle/VirtualBox/VBoxManage.exe" $*
, y luego: - si el cuadro virtual '' boot2docker-vm
'' aún no se ha iniciado, usa vbm modifyvm
- si el cuadro virtual '' boot2docker-vm
'' ya está iniciado, usa vbm controlvm
Normalmente, si me doy cuenta, durante una sesión de boot2docker, que el puerto 80 no es accesible desde Windows:
vbm controlvm "boot2docker-vm" natpf1 "tcp-port80,tcp,,80,,80";
vbm controlvm "boot2docker-vm" natpf1 "udp-port80,udp,,80,,80";
Entonces, y solo entonces, puedo acceder a http://127.0.0.1
Configuraciones persistentes: copiado al servicio del acoplador y cuenta del acoplador
Para usar boot2docker
fácilmente:
- cree en Windows una carpeta
%USERPROFILE%/prog/b2d
- agregue un
.profile
en él (directamente en Windows, en%USERPROFILE%/prog/b2d
), con su configuración y alias.
Por ejemplo (modifiqué el /home/docker/.ashrc
original):
# ~/.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 suele ser la IP devuelta por boot2docker ip
)
Poniendo todo junto para comenzar una sesión b2d.bat
: b2d.bat
- crea y agrega un script
b2d.bat
en tu%PATH%
que:- iniciar
boot2docker
- copie el perfil correcto, tanto para el servicio
docker
(que se reinicia) como para la cuenta de usuario/home/docker
. - iniciar una sesión interactiva ssh
- iniciar
Es decir:
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
Para ingresar a una nueva sesión de boot2docker, con su configuración definida exactamente como lo desee, simplemente escriba:
b2d
Y eres bueno para ir:
Resultado final:
- una
docker search xxx
funcionará (accederá a internet) - cualquier
ENV http_proxy
funcionará (accederá a Internet si las directivasENV http_proxy
están allí) - cualquier archivo de Windows de
%USERPROFILE%/prog/b2d
se puede modificar desde~/b2d
.
O bien, puede escribir y modificar esos mismos archivos (como algunos Dockerfile) directamente desde su sesión de Windows, usando su editor favorito (en lugar devi
)
Y todo esto, detrás de un firewall corporativo.
Bonificación: solo http
Tuan agrega en los comentarios :
Tal vez el proxy de mi empresa no permite https. Aquí está mi solución:
-
boot2docker ssh
,
matar el proceso de docker y - establezca el proxy de
export http_proxy=http://proxy.com
, luego - inicia la
docker -d --insercure-registry docker.io
acoplable condocker -d --insercure-registry docker.io
Estoy intentando obtener una instalación docker funcional siguiendo este tutorial: http://docs.docker.io/en/latest/installation/windows/
Hasta ahora, obtuve la VM ejecutándose con un repositorio descargado manualmente (seguido del github-link y descargado como zip, porque "git clone" no funcionó detrás de mi proxy corporativo, incluso después de configurar el proxy con "git conf --global http .proxy ... "- me siguió pidiendo la autentificación 407, aunque ingresé a mi usuario y PW). Ahora estoy en el estado en que debería usar "docker run busybox echo hello world" (Sección "Running Docker"). Cuando hago esto, primero me dicen que Docker no está instalado (como se muestra en la parte inferior del tutorial), y luego, después de obtenerlo con apt-get install docker, aparece "Segmentation Fault o error crítico encontrado". núcleo y abortar ".
¿Qué hacer ahora? ¿Esto es porque no he usado git clone o hay algún problema con la instalación del acoplador? Leí en alguna parte, que apt-get install docker no instala el docker que quiero, pero algo de GNOME-Tool, ¿puedo especificar mi apt-request para obtener la herramienta correcta?