Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker/Boot2Docker: Set HTTP/HTTPS proxies for docker on OS X

In short: How can I set the HTTP/HTTPS proxies for Docker on Mac OS X?

In detail:

I run Docker (1.12) on Mac OS X behind a proxy. I followed the installation instructions and installed boot2docker. This is working fine if I pull from my network-internal Docker registry.

However, I get the following error when pulling from 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 

Note 1: DOCKER_HOST, http_proxy and https_proxy are available in the environment (running env displays all three).

Note 2: I read in other posts that this error occurs when the daemon is not running properly. However, docker version doesn't show any problems. Moreover, I can pull and run images pulled from my network-internal Docker registry.

Note 3: I was able to set up Docker on Red Hat Linux (RHEL). I had to add the proxy information to /etc/sysconfig/docker. I read that there is a similar file on Ubuntu (/etc/init/docker.conf). However, I could not find that file for Docker (or boot2docker?) on Mac OS X.

like image 297
rrhrg Avatar asked Jun 30 '14 11:06

rrhrg


2 Answers

The config files you need to modify won't be on your OS X file system, they'll be attached to the Tiny Core Linux VM which acts as your local Docker server.

To configure the proxy for that, first start Boot2docker from Applications. Once it's started, get a terminal window and ssh into the 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:~$ 

Now create/modify /var/lib/boot2docker/profile to set proxy info:

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

Tinycore needs the proxy info as follows: protocol://ip:port
To be safe I set proxies for both HTTP and HTTPS.

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

Now you can restart the VM docker service and exit the VM.

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

You should be able to run the client against the VM instance now.

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... 

This change is persisted through VM restarts. You should only need to do it once.

For the record, VirtualBox has a global preference setting for proxies but nothing I tried there would work.

like image 133
Mike Blecha Avatar answered Sep 22 '22 09:09

Mike Blecha


As of the recent (August 2015) 1.8 release, docker's recommended way to create docker hosts - including boot2docker VMs - is through its docker-machine utility.

And also since version 1.8, docker-machine now supports the configuration of the proxies at VM creation time via an invocation like the following:

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 

This results in a VM that has the specified environment variables already added to the initialization file /var/lib/boot2docker/profile - no need to manually add them anymore.

like image 30
avallen Avatar answered Sep 19 '22 09:09

avallen