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

41

简短回答: 我怎样在Mac OS X上为Docker设置HTTP/HTTPS代理?

详细回答:

我在Mac OS X上运行Docker(1.12),并且在代理后面。我遵循了安装说明并安装了boot2docker。如果我从网络内的Docker注册表中拉取,这可以正常工作。

但是,当我从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_HOSThttp_proxyhttps_proxy 这三个环境变量在环境中是可用的(运行 env 命令显示所有三个变量)。

注意 2: 我在其他帖子中看到此错误发生在守护进程未正常运行时。然而,docker version 没有显示任何问题。此外,我能够拉取和运行从我的网络内部 Docker 注册表中拉取的镜像。

注意 3: 我已经在 Red Hat Linux (RHEL) 上成功安装了 Docker。我必须将代理信息添加到 /etc/sysconfig/docker 中。我读到 Ubuntu 上有一个类似的文件 (/etc/init/docker.conf),但是我在 Mac OS X 上找不到 Docker(或 boot2docker?)的该文件。

6个回答

101

需要修改的配置文件不会在您的OS X文件系统上,它们将附加到作为本地Docker服务器的Tiny Core Linux VM上。

要为此配置代理,请首先从“应用程序”启动Boot2docker。启动后,获取终端窗口并ssh进入VM:

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:~$

现在创建/修改 /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服务并退出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...

这个更改将在虚拟机重启时保留。您只需要执行一次即可。

顺便说一下,VirtualBox有一个全局代理设置,但我尝试过的所有方法都无效。


这也不知怎么地解决了我的输入延迟问题。 - Sezin Karli
这些代理设置应该显示在你的 env 中吗?而且 profile 文件应该被称为 .profile 吗? - HattrickNZ
在我们的情况下,之后我们必须运行 boot2docker downboot2docker up - bbodenmiller
仅供记录,该问题也在 https://github.com/docker/toolbox/issues/102 进行了讨论。 - Stepan Vavra

18
截至最近的(2015年8月)1.8版本发布,Docker创建Docker主机(包括boot2docker虚拟机)的推荐方式是使用其docker-machine实用程序。自版本1.8以来,docker-machine现在支持通过以下调用在VM创建时配置代理。
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

这将导致虚拟机在初始化文件/var/lib/boot2docker/profile中已经添加了指定的环境变量 - 不再需要手动添加它们。


1
我通过在.profile文件中设置代理配置解决了这个问题:
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。

+1 我无法启动 Boot2Docker start,因为它无法下载所需的 ISO 文件。通过设置上述环境变量(在 Windows7 中),我成功让它工作了! - Nick Grealy
在我的情况下,我对/.ashrc和/.profile所做的任何更改都不会被持久化。我尝试使用tcl filetool.sh进行备份,但什么都没用...我完全困惑了。 - Vincent De Smet

1
如果你正在使用Docker for Mac并且处于代理环境下。
点击顶部菜单栏上的Docker图标。(如步骤1.3 这里所示)
进入Preferences > Advanced,在HTTP和HTTPS选项中设置代理。点击下面的“应用”和“重启”。完成! :)

请确保使用包括协议在内的完全限定路径。http://<user:pass>@<domain> - Chris Rymer

0
为了解决Docker构建中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

0
在boot2docker中,配置文件应该是/var/lib/boot2docker/profile,编辑此文件以自定义http(s)代理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接