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

use*_*785 21 windows git proxy docker

我正在尝试按照本教程安装一个有效的docker-installation:http: //docs.docker.io/en/latest/installation/windows/

到目前为止,我使用手动下载的存储库运行VM(遵循github-link并下载为zip,因为"git clone"在我的公司代理后面没有工作,即使在使用"git conf --global http"设置代理之后也是如此.proxy ..." - 它一直要求我进行身份验证407,尽管我输入了我的用户和PW).现在我处于我应该使用"docker run busybox echo hello world"的状态("运行Docker"部分).当我这样做时,我首先得知没有安装docker(如教程底部所示),然后,在我用apt-get install docker获取它后,我得到"Segmentation Fault或遇到的严重错误.核心和流产."

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

Von*_*onC 33

公司代理背后的Windows Boot2Docker

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

TLDR; 看GitHub项目VonC/b2d:

克隆它并:

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

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

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

安装和第一步

如果您是工作站的管理员,则可以在Windows上运行boot2docker install.
它目前附带:

  • 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的微内核是主人的容器,你将运行.

代理方面,这意味着:

  • 您的Windows主机必须设置的HTTP_PROXY,HTTPS_PROXYNO_PROXY环境变量(你可能有过,但他们可以通过虚拟盒可用于例如检测虚框的新版本)
  • 您的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.
    • docker帐户(要设置/home/docker/.ashrc),如果你需要执行任何其他需要访问Internet的命令(除了docker)
    • 您将创建的任何Dockerfile(RUN apt-get update例如,下一个将为您提供Could not resolve 'http.debian.net').
      这意味着ENV http_proxy http://...在任何RUN需要访问Internet的命令之前,必须首先添加行.

一个好的no_proxy设置是:

.company,.sock,localhost,127.0.0.1,::1,192.168.59.103
Run Code Online (Sandbox Code Playgroud)

(带有' .company'贵公司的域名,内部网站)


数据持久性?使用文件夹共享

另一点要理解的是boot2docker使用的是Tiny Core,一个微小的Linux发行版(.iso文件只有26 MB).
并且Tiny Core没有持久性(除了一些技术文件夹):如果您~/.ashrc使用所有首选设置和别名修改您的...下一步boot2docker stop / boot2docker start将恢复原始的 Linux环境,您的修改已经消失.

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

boot2docker中所述,您将可以访问(从您的Tiny Core ssh会话)到/c/Users/<yourLogin>(即%USERPROFILE%由Virtual Box共享)


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

最后要理解的是默认情况下没有导出端口:

  • 从您的Tiny Core主机看不到您的容器端口(-p 80:80例如,您必须使用容器的80端口暴露给Linux会话的80端口)
  • 默认情况下,您的Tiny Cort端口不会从您的Virtual Box VM导出:即使您的容器在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 Box' boot2docker-vm'尚未启动,则使用vbm modifyvm - 如果Virtual Box' boot2docker-vm' 已经启动,则使用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";
Run Code Online (Sandbox Code Playgroud)

然后,只有这样,我才能访问http://127.0.0.1


持久设置:复制到docker service docker帐户

为了方便使用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
Run Code Online (Sandbox Code Playgroud)

(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
Run Code Online (Sandbox Code Playgroud)

为了进入一个新的boot2docker会议,与你的设置中定义完全相同,只要你想,只要键入:

b2d
Run Code Online (Sandbox Code Playgroud)

你很高兴去:


最终结果:

  • 一个docker search xxx会工作(它将访问互联网)
  • 任何docker build将工作(如果有ENV http_proxy指令,它将访问互联网)
  • 任何Windows文件%USERPROFILE%\prog\b2d都可以直接修改~/b2d.
    或者您实际上可以使用您喜欢的编辑器(而不是vi)从Windows会话中编写和修改这些相同的文件(如某些Dockerfile )

而这一切都在企业防火墙背后.


额外奖励:仅限http

Tuan 在评论中补充道:

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

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