1

I have been trying to run docker through a local socks5 proxy, I have tried setting the environment variable as such:

export ALL_PROXY=127.0.0.1:1080

But it made no difference as if Docker wasn't reading it, I also tried putting the config in ~/.docker/config.json:

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "socks5://127.0.0.1:1080"
   }
 }
}

But this doesn't work either. What's the problem and how can I run Docker with a socks5 proxy on Ubuntu?

2 Answers 2

5

The docker.service in Ubuntu is agnostic to user's environment variables, but if it were to be passed to the docker.service itself, then it works.

I got it working by adding the following line to the /lib/systemd/system/docker.service file, right before ExecStart:

Environment="ALL_PROXY=socks5://127.0.0.1:1080"

So my docker.service file looked like this:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
Environment="ALL_PROXY=socks5://127.0.0.1:1080"
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3

# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s

# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity

# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes

# kill only the docker process, not all processes in the cgroup
KillMode=process

[Install]
WantedBy=multi-user.target

This seems to have fixed the problem for me and it is working on Ubuntu 20.04.

1

Another solution is to use the privoxy and forward it to your socks5 proxy so you can use privoxy as a https/http proxy.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.