Getting Docker to work with a proxy server
I was recently configuring Docker on a machine that didn’t have direct access to the Internet and had to use proxy for outbound connectivity, and it turned out to be a non-trivial task. All of this info is scattered around the Internet, I’m just bringing it all together. Here’s the steps to get everything working:
- Proxy for the command line
- Proxy for
- Proxy for Docker daemon
- Proxy for Docker build and Docker Compose
This article has been written for Ubuntu Linux and might need tweaking for other distros.
Proxy for the command line
This part is as easy as setting the following environment variables (https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-configure-proxy-on-ubuntu-18-04/):
http_proxy, HTTP_PROXY— proxy server for HTTP Traffic
https_proxy, HTTPS_PROXY— proxy server for HTTPS traffic
ftp_proxy, FTP_PROXY— proxy server for FTP traffic
no_proxy, NO_PROXY— comma separated patterns for IP addresses or domain names that shouldn’t use the proxy. It is a good idea to add at least
127.0.0.1to noproxy list.
Set these once for the active session, add them to
~/.bashrc for persistent settings for current user, or add them to
/etc/environment for persistent settings for all users. It turns out that different tools use different versions of these variables (lowercase vs uppercase), so it’s best so set both versions (see https://wiki.archlinux.org/index.php/Proxy_server#Environment_variables for more info).
Proxy for apt
Create a new apt configuration file under
/etc/apt/apt.conf.d, the name of the new configuration file doesn’t matter much, it’s a good idea to pick something obvious like
50proxy (alternatively, you can edit
/etc/apt.conf directly). Add the following lines to the new configuration file (replace
port with appropriate values):
Proxy for Docker daemon
When using Docker, actions like pulling images are performed by the Docker daemon and do not use your shell’s environment variables. To configure proxy settings for the Docker daemon:
/etc/systemd/system/docker.service.d for Docker proxy settings config file. Then create
/etc/systemd/system/docker.service.d/http-proxy.conf with the following contents (replace
Apply settings and restart Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
(Check the settings using
systemctl show --property=Environment docker).
Proxy for Docker build and Docker Compose
If you’re building Docker images with
docker build or
docker-compose, you will want to configure proxy settings for the build process. Despite the fact that Docker daemon has the correct proxy settings, during the build process commands that update the image being built (i.e.
apt-get update etc.) will fail without this step.
For the user that will be building images, create
~/.docker/config.json with the following contents (replace
More info: https://docs.docker.com/network/proxy/