【问题标题】:Docker/Boot2Docker: Set HTTP/HTTPS proxies for docker on OS XDocker/Boot2Docker:在 OS X 上为 docker 设置 HTTP/HTTPS 代理
【发布时间】:2014-08-20 18:34:19
【问题描述】:

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

详细说明

我在 Mac OS X 上通过代理运行 Docker (1.12)。我跟着installation instructions 安装了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

注意 1DOCKER_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?)的文件。

【问题讨论】:

    标签: macos proxy docker boot2docker


    【解决方案1】:

    您需要修改的配置文件不会在您的 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...
    

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

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

    【讨论】:

    • 这也解决了我的输入延迟问题
    • 这些代理设置是否应该显示在您的env 中?并且应该将profile 文件称为.profile
    • 在我们的例子中,在此之后我们必须运行 boot2docker downboot2docker up
    • 仅供记录,问题也在github.com/docker/toolbox/issues/102讨论
    【解决方案2】:

    从最近的(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 - 不再需要手动添加它们。

    【讨论】:

      【解决方案3】:

      我通过在 .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 中),我能够让它工作!
      • 就我而言,我对 ~/.ashrc 和 ~/.profile 所做的任何更改都不会保留。我尝试了 tcl filetool.sh 进行备份,但没有任何效果..我完全感到困惑。
      【解决方案4】:

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

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

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

      【讨论】:

      • 并确保使用包括协议在内的完全限定路径。 http://&lt;user:pass&gt;@&lt;domain&gt;
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多