Come far funzionare Docker su un sistema Windows dietro un firewall aziendale?

Sto cercando di ottenere un’installazione mobile docker seguendo questo tutorial: http://docs.docker.io/en/latest/installation/windows/

Finora, ho ottenuto la VM in esecuzione con un repository scaricato manualmente (seguito il github-link e scaricato come zip, perché “git clone” non funzionava dietro il mio proxy aziendale, anche dopo aver configurato il proxy con “git conf – global http .proxy … “- continuava a chiedermi l’autenticazione 407, sebbene inserissi il mio utente e PW). Ora sono nello stato in cui dovrei usare “docker run busybox echo hello world” (Sezione “Esecuzione di Docker”). Quando faccio questo, prima mi viene detto che il docker non è installato (come mostrato nella parte inferiore del tutorial), e poi, dopo averlo ottenuto con docker apt-get install, ottengo “Errore di segmentazione o errore critico riscontrato. core e abortire. ”

Cosa fare adesso? È perché non ho usato git clone o c’è qualcosa di sbagliato nell’installazione della finestra mobile? Ho letto da qualche parte, che apt-get install docker non installa la finestra mobile che voglio, ma alcuni GNOME-Tool, posso forse specificare la mia apt-request per ottenere lo strumento giusto?

Windows Boot2Docker dietro il proxy aziendale

(Contesto: marzo 2015, Windows 7, dietro il proxy aziendale)

TLDR; vedi il progetto GitHub VonC/b2d :

Clona e:

  • configurare ..\env.bat seguendo env.bat.template ,
  • aggiungi l’alias che vuoi nel file ‘ profile ‘,
  • eseguire senv.bat quindi b2d.bat .

Quindi ti trovi in ​​un ambiente boot2docker personalizzato con:

  • una sessione ssh in grado di accedere a Internet dietro il proxy aziendale quando si digita la funzione di docker search/pull .
  • Dockerfiles in grado di accedere a Internet dietro proxy aziendale quando eseguono un apt-get update/install e si digita una docker build .

Installazione e primi passi

Se sei amministratore della tua workstation, puoi eseguire l’installazione di boot2docker su Windows .
Attualmente viene fornito 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

Quindi, una volta installato:

  • aggiungi c:\path\to\Boot2Docker For Windows\ nel tuo %PATH%
  • (una volta): boot2docker init
  • boot2docker start
  • boot2docker ssh
  • digitare exit per uscire dalla sessione ssh e boot2docker ssh per tornare indietro: la cronologia dei comandi appena digitati viene mantenuta.
  • se si desidera chiudere la VM, boot2docker stop

In realtà è ansible visualizzare o arrestare la VM se si apre la GUI della Virtual Box e si digita una sessione boot2docker start DOS boot2docker start o stop boot2docker start .


Host e Proxy: Windows => Boot2Docker => Contenitori Docker

Il punto principale da capire è che dovrai gestire 2 HOSTS :

  • la tua workstation Windows è l’ host di Linux Tiny Core eseguito da VirtualBox per poter definire ed eseguire i contenitori
    ( %HOME%\.boot2docker\boot2docker.iso =>
    . %USERPROFILE%\VirtualBox VMs\boot2docker-vm\boot2docker-vm.vmdk ),
  • Il tuo boot2docker Linux Tiny Core ospita i tuoi contenitori che eseguirai.

In termini di proxy , ciò significa:

  • Il tuo host di Windows deve aver impostato la sua variabile d’ambiente HTTP_PROXY , HTTPS_PROXY e NO_PROXY (probabilmente li hai già, e possono essere usati ad esempio dal Virtual Box per rilevare nuove versioni di Virtual Box)
  • Il tuo Tiny Core Host deve avere impostato http_proxy , https_proxy e no_proxy (nota il caso, in minuscolo nell’ambiente Linux) per:
    • il servizio docker per poter interrogare / caricare le immagini (ad esempio: docker search nginx ).
      Se non impostato, la prossima docker pull otterrà un dial tcp: lookup index.docker.io: no such host .
      Questo è impostato in un nuovo file /var/lib/boot2docker/profile : è profile , non .profile .
    • l’account /home/docker/.ashrc (da impostare in /home/docker/.ashrc ), se è necessario eseguire qualsiasi altro comando (diverso da docker) che richiederebbe l’accesso a Internet)
    • qualsiasi Dockerfile che crei (o il prossimo RUN apt-get update verrà Could not resolve 'http.debian.net' , ad esempio, Could not resolve 'http.debian.net' ).
      Ciò significa che è necessario aggiungere le linee ENV http_proxy http://... prima di ogni comando RUN richiede l’accesso a Internet.

Un buon no_proxy da impostare è:

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

(con ‘ .company ‘ il nome di dominio della tua azienda, per i siti interni)


Persistenza dei dati? Usa la condivisione delle cartelle

L’altro punto da capire è che boot2docker usa Tiny Core , una … piccola distribuzione Linux (il file .iso è solo 26 MB).
E Tiny Core non offre persistenza (tranne alcune cartelle tecniche): se modifichi il tuo ~/.ashrc con tutte le tue impostazioni e alias preferiti … il prossimo boot2docker stop / boot2docker start ripristinerà un ambiente Linux incontaminato , con la tua modifica andato .

Devi assicurarti che il VirtualBox abbia scaricato Oracle_VM_VirtualBox_Extension_Pack e aggiunto in Virtual Box / File / Impostazioni / Estensione / aggiungi il file Oracle_VM_VirtualBox_Extension_Pack-4.x.yy-zzzzz.vbox-extpack ).

Come documentato in boot2docker , avrai accesso (dalla tua sessione ssh Tiny Core) a /c/Users/ (cioè /c/Users/ %USERPROFILE% è condiviso da Virtual Box)


Reindirizzamento delle porte? Per container e per VirtualBox VM

L’ultimo punto da capire è che nessuna porta viene esportata di default :

  • le porte del tuo contenitore non sono visibili dal tuo host Tiny Core (per esempio devi usare -p 80:80 per esporre la porta 80 del contenitore alla porta 80 della sessione Linux)
  • le tue porte Tiny Cort non vengono esportate dalla tua Virtual Box VM per impostazione predefinita : anche se il tuo contenitore è visibile da Tiny Core, il tuo browser Windows non lo vedrà: http://127.0.0.1 non funzionerà ” The connection was reset “.

Per il primo punto, docker run -it --rm --name my-apache-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4 non funzionerà senza -p 80:80 dentro.

Per il secondo punto, definire un alias doskey vbm="c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" $* , quindi: – se la casella virtuale ‘ boot2docker-vm ‘ non è stata ancora avviata, utilizza vbm modifyvm – se la Virtual Box ” boot2docker-vm ” è già stata avviata, utilizza vbm controlvm

In genere, se mi rendo conto, durante una sessione boot2docker, che la porta 80 non è accessibile da Windows:

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

Quindi, e solo dopo, posso accedere a http://127.0.0.1


Impostazioni persistenti: copiate nel servizio finestra mobile e nell’account del docker

Per usare facilmente boot2docker :

  • crea su Windows una cartella %USERPROFILE%\prog\b2d
  • aggiungi un .profile (direttamente in Windows, in %USERPROFILE%\prog\b2d ), con le tue impostazioni e il tuo alias.

Ad esempio (ho modificato l’originale /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://:@proxy.company:80 export HTTPS_PROXY=http://:@proxy.company:80 export NO_PROXY=.company,.sock,localhost,127.0.0.1,::1,192.168.59.103 export http_proxy=http://:@proxy.company:80 export https_proxy=http://:@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//prog/b2d' ln -fs /c/Users//prog/b2d /home/docker 

(192.168.59.103 è in genere l’ip restituito da boot2docker ip )


Mettendo tutto insieme per avviare una sessione b2d.bat : b2d.bat

  • crea e aggiungi uno script b2d.bat nel tuo %PATH% che:
    • avvia boot2docker
    • copia il profilo corretto, sia per il servizio docker (che viene riavviato) sia per l’account utente /home/docker .
    • avviare una sessione ssh intertriggers

Questo è:

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

Per inserire una nuova sessione boot2docker, con le impostazioni definite esattamente come vuoi, digita semplicemente:

 b2d 

E tu sei bello andare:


Risultato finale:

  • una docker search xxx funzionerà (accederà a Internet)
  • qualsiasi docker build funzionerà (accederà a Internet se sono presenti le direttive ENV http_proxy )
  • qualsiasi file Windows da %USERPROFILE%\prog\b2d può essere modificato direttamente da ~/b2d .
    Oppure puoi effettivamente scrivere e modificare quegli stessi file (come alcuni Dockerfile) direttamente dalla tua sessione di Windows, usando il tuo editor preferito (invece di vi )

E tutto questo, dietro un firewall aziendale.


Bonus: solo http

Tuan aggiunge nei commenti :

Forse il proxy della mia azienda non consente https. Ecco la mia soluzione:

  • boot2docker ssh ,
    uccidere il processo docker e
  • imposta l’ export http_proxy=http://proxy.com proxy export http_proxy=http://proxy.com , quindi
  • avvia la finestra mobile con la docker -d --insercure-registry docker.io