Docker / Boot2Docker:为OS X上的docker设置HTTP / HTTPS代理

简而言之 :如何在Mac OS X上设置Docker的HTTP / HTTPS代理?

详细地说

我在Mac OS X上运行代理后面的Docker(1.12)。 我按照安装说明安装了boot2docker。 如果我从networking内部的Dockerregistry中获取这个工作正常。

但是,从docker.io提取时出现以下错误:

machine:~ me$ docker run ubuntu echo hello world Unable to find image 'ubuntu' locally Pulling repository ubuntu 2014/06/30 13:23:26 Get https://index.docker.io/v1/repositories/ubuntu/images: dial tcp: lookup index.docker.io: no such host 

注1DOCKER_HOSThttp_proxyhttps_proxy在环境中可用(运行env显示全部三个)。

注2 :我在其他post中读到,当守护程序运行不正常时会发生此错误。 但是, docker version不显示任何问题。 此外,我可以拉和运行从我的networking内部的Dockerregistry中提取的图像。

注3 :我可以在Red Hat Linux (RHEL)上设置Docker。 我不得不将代理信息添加到/etc/sysconfig/docker 。 我读过Ubuntu上有类似的文件( /etc/init/docker.conf )。 但是,我无法在Mac OS X上findDocker(或boot2docker?)的文件。

您需要修改的configuration文件不会在您的OS X文件系统上,它们将连接到充当您本地Docker服务器的Tiny Core Linux VM。

要为此configuration代理,请首先从“应用程序”启动Boot2docker。 一旦启动,获得一个terminal窗口和ssh进入虚拟机:

 bash-3.2$ boot2docker ssh Warning: Permanently added '[localhost]:2022' (RSA) to the list of known hosts. ## . ## ## ## == ## ## ## ## === /""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/ _ _ ____ _ _ | |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ | '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__| | |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ | |_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_| boot2docker: 1.0.1 master : cad5ece - Fri Jun 20 02:03:40 UTC 2014 docker@boot2docker:~$ 

现在创build/修改/ var / lib / boot2docker / profile来设置代理信息:

 docker@boot2docker:~$ sudo vi /var/lib/boot2docker/profile 

Tinycore需要代理信息如下:protocol:// ip:port
为了安全起见,我为HTTP和HTTPS设置了代理。

 export HTTP_PROXY=http://your.proxy.name:8080 export HTTPS_PROXY=http://your.proxy.name:8080 

现在可以重新启动VM泊坞服务并退出虚拟机。

 docker@boot2docker:~$ sudo /etc/init.d/docker restart docker@boot2docker:~$ exit Connection to localhost closed. 

你现在应该可以在VM实例上运行客户端了。

 bash-3.2$ docker search ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Official Ubuntu base image 356 stackbrew/ubuntu Official Ubuntu base image 39 crashsystems/gitlab-docker A trusted, regularly updated build of GitL... 

此更改通过VM重新启动持续进行。 你只需要做一次。

为了logging,VirtualBox具有代理的全局首选项设置,但没有任何我在那里尝试会工作。

从最近的(2015年8月)1.8版本开始,docker推荐的创builddocker主机(包括boot2docker虚拟机)的方法是通过docker -machine实用程序。

而且从版本1.8开始,docker-machine现在支持在VM创build时通过如下调用来configuration代理:

 docker-machine create -d virtualbox \ --engine-env HTTP_PROXY=http://192.37.246.181:2010 \ --engine-env HTTPS_PROXY=http://192.37.246.181:2010 \ --engine-env NO_PROXY=novartis.net \ default 

这会导致VM已经将指定的环境variables添加到初始化文件/ var / lib / boot2docker / profile中 – 无需再手动添加它们。

我通过在.profile文件中设置代理configuration来解决这个问题:

 docker@boot2docker:~$ vi ~/.profile 

最后添加你的代理:

 # PS1='\u@\h:\w\$ ' PAGER='less -EM' MANPAGER='less -isR' EDITOR=vi export PS1 PAGER FILEMGR EDITOR MANPAGER export BACKUP=1 [ "`id -un`" = "`cat /etc/sysconfig/tcuser`" ] && echo "$BACKUP" | sudo tee /etc/sysconfig/backup >/dev/null 2>&1 export FLWM_TITLEBAR_COLOR="58:7D:AA" if [ -f "$HOME/.ashrc" ]; then export ENV="$HOME/.ashrc" . "$HOME/.ashrc" fi TERMTYPE=`/usr/bin/tty` [ ${TERMTYPE:5:3} == "tty" ] && ( [ ! -f /etc/sysconfig/Xserver ] || [ -f /etc/sysconfig/text ] || [ -e /tmp/.X11-unix/X0 ] || startx ) export HTTP_PROXY=http://proxy.XX.com:8080 export HTTPS_PROXY=http://proxy.XX.com:8080 

最后,重新启动您的Boot2Docker。

如果您正在使用Docker for Mac并且位于代理环境之后。

点击顶部菜单栏上的泊坞窗图标。 (如步骤1.3所示)

转到Preferences > Advanced然后在那里设置HTTP和HTTPS选项中的代理。 点击下面的应用并重新启动。 你已准备好出发。 🙂

为了解决Docker构build中的curl问题,我在Dockerfile中添加了以下内容:

 ENV http_proxy=http://infoprx2:8080 ENV https_proxy=http://infoprx2:8080 RUN apt-get update && apt-get install -y curl vim 

请注意,ENV语句在RUN语句之前。

为了使docker守护进程能够访问互联网(我用boot2docker使用kitematic),我在/ var / lib / boot2docker / profile中添加了以下内容:

 export HTTP_PROXY=http://infoprx2:8080 export HTTPS_PROXY=http://infoprx2:8080 

boot2docker中的configuration文件应该是/var/lib/boot2docker/profile ,编辑这个文件到自定义http(s)代理。