windows - 如何让 Docker 在企业防火墙后面的 Windows 系统上运行?

标签 windows git proxy docker

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

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

现在我处于应该使用“docker run busybox echo hello world”的状态​​(“运行Docker”部分)。

当我这样做时,我首先被告知未安装 Docker(如教程底部所示),然后,在我通过 apt-get install docker 获得它之后。 ,我得到“遇到段错误或严重错误。转储核心并中止。”

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

最佳答案

企业代理背后的 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 session 能够在公司代理后面访问互联网.
  • Dockerfiles 能够在执行 apt-get update/install 时通过公司代理访问互联网然后你输入一个 docker build .


  • 安装和第一步

    如果您是工作站的管理员,则可以运行 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 session ,然后 boot2docker ssh返回:您刚刚输入的命令的历史记录被保留。
  • 如果你想关闭虚拟机,boot2docker stop

  • 如果您打开 Virtual Box GUI,并输入 DOS cmd session boot2docker start,您实际上可以看到 VM 启动或停止。或 stop .

    主机和代理:Windows => Boot2Docker => Docker 容器

    要理解的要点是您将需要管理 2 个 HOSTS :
  • 您的 Windows 工作站是 主持人 Linux Tiny Core 由 VirtualBox 运行,以便您定义和运行容器
    ( %HOME%\.boot2docker\boot2docker.iso =>
    . %USERPROFILE%\VirtualBox VMs\boot2docker-vm\boot2docker-vm.vmdk ),
  • 你的 boot2docker Linux Tiny Core 是 主持人给您的 容器你会跑。

  • 方面代理 ,这意味着:
  • 您的 Windows 主机必须设置其 HTTP_PROXY , HTTPS_PROXYNO_PROXY环境变量(您可能已经拥有它们,例如 Virtual Box 可以使用它们来检测 Virtual Box 的新版本)
  • 您的 Tiny Core Host 必须设置 http_proxy , https_proxyno_proxy (注意大小写,Linux 环境中的小写)用于:
  • 码头服务 能够查询/加载图像(例如: docker search nginx )。
    如果没有设置,下一个docker pull会给你一个 dial tcp: lookup index.docker.io: no such host .
    这是在新文件 /var/lib/boot2docker/profile 中设置的: 是profile ,不是 .profile .
  • docker 帐号 (设置在 /home/docker/.ashrc 中),如果您需要执行任何其他需要互联网访问的命令(除了 docker))
  • 任何 Dockerfile 您将创建的(或下一个 RUN apt-get update 将为您提供一个,例如, Could not resolve 'http.debian.net' )。
    这意味着您必须添加行 ENV http_proxy http://...首先,在任何 RUN 之前命令需要访问互联网。

  • 不错no_proxy要设置的是:
    .company,.sock,localhost,127.0.0.1,::1,192.168.59.103
    

    ('.company' 是贵公司的域名,用于内部站点)

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

    另一点要理解的是 boot2docker 使用 Tiny Core , a... 小型 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文件)。

    documented in boot2docker ,您将可以(从您的 Tiny Core ssh session )访问 /c/Users/<yourLogin> (即 %USERPROFILE% 由 Virtual Box 共享)

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

    最后一点要理解的是默认不导出端口 :
  • 您的容器端口在您的 Tiny Core 主机上是不可见的(例如,您必须使用 -p 80:80 才能将容器的 80 端口暴露给 Linux session 的 80 端口)
  • 您的 默认情况下,不会从 Virtual Box VM 导出 Tiny Cort 端口 :即使您的容器在 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 session 期间意识到无法从 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服务和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
    

    (192.168.59.103 通常是 boot2docker ip 返回的ip)

    将所有内容放在一起以启动 boot2docker session :b2d.bat
  • 创建并添加 b2d.bat您的 %PATH% 中的脚本这将:
  • 开始 boot2docker
  • docker 复制正确的配置文件服务(重新启动)和 /home/docker用户帐号。
  • 启动交互式 ssh session

  • 那是:
    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 session ,您的设置完全按照您的需要定义,只需键入:
    b2d
    

    你很高兴去:

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

  • 而这一切,都在企业防火墙之后。

    奖励:仅限 http

    Tuan添加 in the comments :

    Maybe my company's proxy doesn't allow https. Here's my workaround:


  • boot2docker ssh ,
    杀死 docker 进程和
  • 设置代理 export http_proxy=http://proxy.com ,然后
  • 使用 docker -d --insercure-registry docker.io 启动 docker
  • 关于windows - 如何让 Docker 在企业防火墙后面的 Windows 系统上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20196051/

    相关文章:

    git - 致命的 : No configured push destination

    git - 在我用 `--depth 1` 克隆 repo 后如何获取所有 git 历史记录?

    git - Git 在服务器的什么地方存储文件?

    apache - 如何在 node-http-proxy 旁边使用虚拟主机?

    kubernetes - 如何使用 Kubernetes Go 客户端调用 Pod 代理动词?

    c++ - C++ 中的字符串类型 : how to convert from LPWSTR to LPSTR?

    linux - 在 docker windows 上运行 linux 容器

    c# - 获取可用的 Windows 音频文件格式列表

    python - 在 Windows 上安装新版本(升级)

    web-services - 什么是 Web 服务中的代理和 stub ?