如何让Docker在公司防火墙后面的Windows系统上运行?

时间:2013-11-25 14:51:20

标签: windows git proxy docker

我正在尝试按照本教程安装Docker: http://docs.docker.io/en/latest/installation/windows/

到目前为止,我使用手动下载的存储库运行VM(遵循GitHub链接并下载为ZIP文件,因为“git clone”在我的公司代理后面不起作用,即使在设置了代理“ git conf --global http.proxy ...“ - 它一直要求我进行身份验证407,虽然我输入了我的用户名和密码。)

现在我处于“docker run busybox echo hello world”状态(“运行Docker”部分)。

当我这样做时,我首先得知没有安装Docker(如教程底部所示),然后,在我用apt-get install docker得到它之后,我得到“Segmentation Fault或遇到严重错误。倾倒核心并中止。“

我现在能做什么?这是因为我没有使用git clone或者Docker安装有问题吗?我在某处读到,apt-get install docker没有安装我想要的Docker,而是安装了一些GNOME工具。我可以指定我的apt-request来获得正确的工具吗?

1 个答案:

答案 0 :(得分:32)

企业代理

背后的Windows Boot2Docker

(上下文:2015年3月,Windows 7,企业代理背后)

TLDR;请参阅GitHub项目 VonC/b2d

克隆它并:

  • ..\env.bat
  • 之后配置env.bat.template
  • 在' profile'中添加您想要的别名。文件
  • 执行senv.bat然后b2d.bat

然后,您处于适当自定义的boot2docker环境中,其中包含:

  • 当您键入docker search/pull时,能够在公司代理后面访问互联网的ssh会话。
  • 当他们执行apt-get update/install并键入docker build时,Dockerfiles能够访问公司代理后面的互联网。

安装和第一步

如果您是工作站的管理员,则可以运行boot2docker install on your 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返回:您刚输入的命令的历史记录将被保留。
  • 如果要关闭VM boot2docker stop

如果打开Virtual Box GUI,您实际上可以看到 VM启动或停止,并输入DOS cmd会话boot2docker startstop


主持人&代理:Windows => Boot2Docker => Docker容器

要理解的要点是你需要管理2个HOSTS

  • 您的Windows工作站是VirtualBox运行的 Linux Tiny Core 主机,以便您定义和运行容器
    %HOME%\.boot2docker\boot2docker.iso =>
    %USERPROFILE%\VirtualBox VMs\boot2docker-vm\boot2docker-vm.vmdk),
  • 您的boot2docker Linux Tiny Core 主机到您将运行的容器

代理方面,这意味着:

  • 您的Windows主机必须已设置其HTTP_PROXYHTTPS_PROXYNO_PROXY环境变量(您可能已经拥有它们,并且可以通过Virtual Box使用它们来检测新的版本的Virtual Box)
  • 您的Tiny Core Host必须设置http_proxyhttps_proxyno_proxy(注意案例,Linux环境中的小写):
    • 泊坞窗服务,可以查询/加载图片(例如:docker search nginx)。
      如果未设置,则下一个docker pull将为您提供dial tcp: lookup index.docker.io: no such host 这是在新文件/var/lib/boot2docker/profile中设置的:它是profile,而不是.profile
    • 泊坞窗帐户(将在/home/docker/.ashrc中设置),如果您需要执行任何其他需要访问互联网的命令(除了docker)
    • 您将创建的
    • 任何Dockerfile (或下一个RUN apt-get update会为您提供一个,例如Could not resolve 'http.debian.net')。
      这意味着您必须首先在需要访问Internet的任何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 MB)。
并且 Tiny Core不提供持久性(少数技术文件夹除外):如果您使用所有首选设置和别名修改~/.ashrc,则下一个boot2docker stop / boot2docker start将恢复一个 pristine Linux环境,修改已经消失

您需要确保VirtualBox已下载Oracle_VM_VirtualBox_Extension_Pack并添加到虚拟框/文件/设置/扩展/添加Oracle_VM_VirtualBox_Extension_Pack-4.x.yy-zzzzz.vbox-extpack文件中。

作为documented in boot2docker,您将有权访问(从您的Tiny Core ssh会话)到/c/Users/<yourLogin>(即虚拟框共享%USERPROFILE%


端口重定向?对于VirtualBox VM的容器

要理解的最后一点是默认情况下不会导出任何端口

  • 您的容器端口在您的Tiny Core主机上不可见(例如,您必须使用-p 80:80才能将容器的80端口暴露给Linux会话的80端口)
  • 您的 Tiny Cort端口默认情况下不会从您的Virtual Box VM导出:即使您的容器在Tiny Core中可见,您的Windows浏览器也看不到它:{{3赢得了工作&#34; The connection was reset&#34;。

对于第一点,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" $*,然后:    - 如果虚拟框&#39; boot2docker-vm&#39;尚未开始使用vbm modifyvm    - 如果虚拟框&#39; boot2docker-vm&#39; 已经启动,使用vbm controlvm

通常,如果我在boot2docker会话期间意识到无法从Windows访问端口80:

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 service docker account

为了轻松使用boot2docker

  • 在Windows上创建文件夹%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返回的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指令,它将访问互联网)
  • %USERPROFILE%\prog\b2d中的任何Windows文件都可以从~/b2d开始修改 或者您实际上可以使用您喜欢的编辑器(而不是vi)在Windows会话中编写和修改这些相同的文件(如某些Dockerfile)

所有这一切都在公司防火墙后面。


奖金:仅限http

http://127.0.0.1添加Tuan

  

也许我公司的代理人不允许https。这是我的解决方法:

  • boot2docker ssh
    杀死码头工程和
  • 设置代理export http_proxy=http://proxy.com,然后
  • 使用docker -d --insercure-registry docker.io
  • 启动泊坞窗