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
注1 : DOCKER_HOST
, http_proxy
和https_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)代理。