如何让Docker在公司防火墙后的Windows系统上运行?
我试图得到一个工作docker安装以下教程: http : //docs.docker.io/en/latest/installation/windows/
到目前为止,我得到的虚拟机运行一个手动下载的存储库(后面的github链接,并下载为zip,因为“git克隆”没有工作在我的公司代理,即使设置代理与“git conf –global http .proxy …“ – 它一直要求我authentication407,虽然我进入了我的用户&PW)。 现在我处于应该使用“docker run busybox echo hello world”(Section“Running Docker”)的状态。 当我这样做的时候,我首先被告知Docker没有安装(如教程的底部所示),然后,当我用apt-get install docker得到它时,我得到“Segmentation Fault或者遇到严重错误。核心和堕落“。
现在做什么? 这是因为我没有使用git clone或者是docker安装有问题吗? 我读的地方,apt-get安装docker不安装我想要的docker,但一些GNOME的工具,我可以指定我的apt-request来获得正确的工具?
公司代理之后的Windows Boot2Docker
(上下文:2015年3月,Windows 7,后面的公司代理)
TLDR; 参见GitHub项目VonC/b2d
:
克隆它和:
- 在
env.bat.template
之后configuration..\env.bat
, - 在'
profile
'文件中添加你想要的别名, - 执行
senv.bat
然后b2d.bat
。
然后您就可以在正确定制的boot2docker
环境中使用:
- 当你input
docker search/pull
时,ssh会话可以访问公司代理服务器后面的networking。 - 在执行
apt-get update/install
并且键入docker build时,Dockerfiles能够在公司代理后面访问互联网。
安装和第一步
如果您是工作站的pipe理员,则可以在Windows上运行boot2docker安装 。
它目前来与:
- Boot2Docker 1.5.0(Docker v1.5.0,Linux v3.18.5)
- Boot2Dockerpipe理工具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
返回:刚才input的命令的历史logging将被保留。 - 如果你想closures虚拟机,
boot2docker stop
实际上,如果打开Virtual Box GUI,则可以看到虚拟机启动或停止,然后键入DOS cmd会话boot2docker start
或stop
。
主机&代理:Windows => Boot2Docker => Docker容器
要理解的要点是, 你将需要pipe理2个主持人 :
- 您的Windows工作站是VirtualBox运行的Linux Tiny Core的主机 ,以便您定义和运行容器
(%HOME%\.boot2docker\boot2docker.iso
=>
。%USERPROFILE%\VirtualBox VMs\boot2docker-vm\boot2docker-vm.vmdk
), - 您的boot2docker Linux Tiny Core是您要运行的容器的 主机 。
在代理期间 ,这意味着:
- 您的Windows主机必须已经设置了其
HTTP_PROXY
,HTTPS_PROXY
和NO_PROXY
环境variables(您可能已经有了它们,例如Virtual Box可以使用它们来检测Virtual Box的新版本) - 你的微型核心主机必须设置
http_proxy
,https_proxy
和no_proxy
(注意,在Linux环境下小写):- docker服务能够查询/加载图像(例如:
docker search nginx
)。
如果没有设置,下一个dial tcp: lookup index.docker.io: no such host
docker pull
会得到一个dial tcp: lookup index.docker.io: no such host
。
这是在一个新的文件/var/lib/boot2docker/profile
:它是profile
,而不是.profile
。 -
/home/docker/.ashrc
帐户 (在/home/docker/.ashrc
设置),如果需要执行任何其他需要访问互联网的命令(/home/docker/.ashrc
除外) - 任何您将创build的Dockerfile (或下一个
RUN apt-get update
都会得到一个例如Could not resolve 'http.debian.net'
)。
这意味着您必须在任何需要访问互联网的RUN
命令之前先添加ENV http_proxy http://...
行。
- docker服务能够查询/加载图像(例如:
一个好的no_proxy
设置是:
.company,.sock,localhost,127.0.0.1,::1,192.168.59.103
(与“。 .company
”的公司的域名,内部网站)
数据持久性? 使用文件夹共享
另一点要明白的是, boot2docker使用微小的核心 ,一个微小的Linux发行(.iso文件只有26 MB)。
而且Tiny Core不提供持久性 (除了一些技术文件夹):如果你用你所有的首选设置和别名来修改你的~/.ashrc
…下一次boot2docker stop / boot2docker start
会恢复一个原始的 Linux环境, 走了 。
您需要确保VirtualBox具有下载的Oracle_VM_VirtualBox_Extension_Pack并添加到Virtual Box / File / Settings / Extension /添加了Oracle_VM_VirtualBox_Extension_Pack-4.x.yy-zzzzz.vbox-extpack
文件。
正如boot2docker中所logging的 ,您将可以访问(从您的Tiny Core ssh会话)到/c/Users/<yourLogin>
(即%USERPROFILE%
由Virtual Box共享)
端口redirect? 对于容器和 VirtualBox VM
最后要理解的是默认情况下没有端口被导出 :
- 您的容器端口在您的Tiny Core主机中不可见(例如,为了将容器的80端口暴露于Linux会话的80端口,您必须使用
-p 80:80
) - 您的微型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" $*
,然后: – 如果Virtual boot2docker-vm
'尚未启动,则使用vbm modifyvm
– 如果Virtual 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
:
- 在Windows上创build一个文件夹
%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通常是由boot2docker ip
返回的boot2docker ip
)
把所有东西放在一起开始一个boot2docker会话: b2d.bat
- 在你的
%PATH%
创build并添加一个b2d.bat
脚本,它将:- 启动
boot2docker
- 为
docker
服务(已重新启动)和/home/docker
用户帐户复制正确的configuration文件。 - 发起一个交互式的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会话,只要你想要的设置完全定义,只需input:
b2d
你很好走:
最终结果:
-
docker search xxx
将工作(它将访问互联网) - 任何
docker build
将工作(如果ENV http_proxy
指令在那里将访问互联网) -
%USERPROFILE%\prog\b2d
任何Windows文件都可以从~/b2d
修改。
或者你实际上可以使用你最喜欢的编辑器(而不是vi
)从Windows会话中编写和修改相同的文件(如一些Dockerfile)
而所有这一切都是在企业防火墙的后面。
奖金:只有http
Tuan补充说 :
也许我公司的代理不允许https。 这是我的解决方法:
-
boot2docker ssh
,
杀死docker进程 - 设置代理
export http_proxy=http://proxy.com
,然后 -
docker -d --insercure-registry docker.io
启动docker -d --insercure-registry docker.io