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_HOST和在环境中可用(运行http_proxy显示所有三个)。https_proxyenv

注意 2:我在其他帖子中读到,当守护程序未正常运行时会发生此错误。但是,docker version没有显示任何问题。此外,我可以拉取和运行从我的网络内部 Docker 注册表拉取的图像。

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

4

6 回答 6

101

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

要为此配置代理,首先从 Applications 启动 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...

此更改通过 VM 重新启动保持不变。您应该只需要执行一次。

作为记录,VirtualBox 具有代理的全局首选项设置,但我在那里尝试的任何方法都不起作用。

于 2014-06-30T20:57:52.143 回答
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

这会导致 VM 已将指定的环境变量添加到初始化文件 /var/lib/boot2docker/profile - 不再需要手动添加它们。

于 2015-08-18T13:57:41.583 回答
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。

于 2014-07-04T10:21:23.150 回答
1

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

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

转到Preferences > Advanced并在那里设置 HTTP 和 HTTPS 选项中的代理。单击其下方的应用并重新启动。你已准备好出发。:)

于 2016-10-12T07:29:43.360 回答
0

为了解决 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 守护进程能够访问互联网(我将 kitematic 与 boot2docker 一起使用),我将以下内容添加到 /var/lib/boot2docker/profile 中:

export HTTP_PROXY=http://infoprx2:8080
export HTTPS_PROXY=http://infoprx2:8080
于 2016-10-26T14:38:56.147 回答
0

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

于 2016-12-19T03:29:19.847 回答