HTTP Proxy Settings for Docker, git, apt, yum
1. Setup HTTP Proxy Environment Variables
Linux and Unix-like systems has environment variable called http_proxy
, https_proxy
and no_proxy
. It allows you to connect text based session and/or applications via the proxy server. All you need is proxy server IP address (URL) and port values. The variable is almost used by all utilities such as elinks, lynx, wget, curl, git and others commands.
Type the following command to set proxy server environment variables:
$ export http_proxy=http://[USERNAME:PASSWORD@]PROXY_HOST:PORT/
$ export https_proxy=http://[USERNAME:PASSWORD@]PROXY_HOST:PORT/
$ export no_proxy=localhost,127.0.0.1,::1,codefarm.me
To setup the proxy environment variable as a global variable for all users, append the above settings into /etc/profile file or /etc/profile.d/http-proxy.sh. for example:
$ cat /etc/profile.d/http_proxy.sh
export {HTTP,HTTPS}_PROXY=http://PROXY_HOST:PORT/
export {http,https}_proxy=http://PROXY_HOST:PORT/
export {NO_PROXY,no_proxy}=localhost,127.0.0.1,::1,192.168.99.100
$ env | grep -i proxy
HTTP_PROXY=http://PROXY_HOST:PORT/
https_proxy=http://PROXY_HOST:PORT/
http_proxy=http://10.38.32.189:10808/
no_proxy=localhost,127.0.0.1,::1,192.168.99.100
NO_PROXY=localhost,127.0.0.1,::1,192.168.99.100
HTTPS_PROXY=http://PROXY_HOST:PORT/
2. Docker
The Docker daemon uses the HTTP_PROXY
, HTTPS_PROXY
, and NO_PROXY
environmental variables in its start-up environment to configure HTTP or HTTPS proxy behavior. You cannot configure these environment variables using the daemon.json
file.
This example overrides the default docker.service
file.
If you are behind an HTTP or HTTPS proxy server, for example in corporate settings, you need to add this configuration in the Docker systemd service file.
-
Create a systemd drop-in directory for the docker service:
$ sudo mkdir -p /etc/systemd/system/docker.service.d
-
Create a file called
/etc/systemd/system/docker.service.d/http-proxy.conf
that adds theHTTP_PROXY
environment variable:[Service] Environment="HTTP_PROXY=http://proxy.example.com:80/"
Or, if you are behind an HTTPS proxy server, create a file called
/etc/systemd/system/docker.service.d/https-proxy.conf
that adds theHTTPS_PROXY
environment variable:[Service] Environment="HTTPS_PROXY=https://proxy.example.com:443/"
-
If you have internal Docker registries that you need to contact without proxying you can specify them via the
NO_PROXY
environment variable:[Service] Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
Or, if you are behind an HTTPS proxy server:
[Service] Environment="HTTPS_PROXY=https://proxy.example.com:443/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
-
Flush changes:
$ sudo systemctl daemon-reload
-
Restart Docker:
$ sudo systemctl restart docker
-
Verify that the configuration has been loaded:
$ systemctl show --property=Environment docker Environment=HTTP_PROXY=http://proxy.example.com:80/
Or, if you are behind an HTTPS proxy server:
$ systemctl show --property=Environment docker Environment=HTTPS_PROXY=https://proxy.example.com:443/
3. apt
cat <<EOF > /etc/apt/apt.conf.d/10httproxy
> Acquire::http::Proxy "http://PROXY_HOST:PORT";
> Acquire::http::Proxy {
> #security.debian.org DIRECT;
> #security-cdn.debian.org DIRECT;
> ftp2.cn.debian.org DIRECT;
> ftp.cn.debian.org DIRECT;
> mirror.lzu.edu.cn DIRECT;
> mirrors.163.com DIRECT;
> mirrors.huaweicloud.com DIRECT;
> mirrors.tuna.tsinghua.edu.cn DIRECT;
> mirrors.ustc.edu.cn DIRECT;
>
> download.docker.com DIRECT;
> packages.microsoft.com DIRECT;
> };
> EOF
4. yum
echo 'proxy=http://PROXY_HOST:PORT' >> /etc/yum.conf
5. git
git config --global http.proxy "http://PROXY_HOST:PORT"