I have created a script to set Use docker in proxy environment on ubuntu 20.04.1 in a batch.
docker-proxy.py
.chmod + x docker-proxy.py
.sudo docker-proxy.py proxy-url
.Where proxy-url is a string such as http://192.168.11.61:3128
.
#!/usr/bin/python3
import string
import subprocess
import os
import sys
###########################################################################
# template for /etc/apt/apt.conf
###########################################################################
template_apt_conf = """\
Acquire::http::Proxy "$proxy_url";
Acquire::https::Proxy "$proxy_url";
"""
###########################################################################
# template for /etc/systemd/system/docker.service.d/override.conf
###########################################################################
template_docker_service_override = """\
[Service]
Environment="HTTP_PROXY=$proxy_url"
Environment="HTTPS_PROXY=$proxy_url"
Environment="NO_PROXY=localhost,127.0.0.1"
"""
###########################################################################
# template for ~/.docker/config.json
###########################################################################
template_config_json = """\
{
"proxies": {
"default": {
"httpProxy": "$proxy_url",
"httpsProxy": "$proxy_url",
"noProxy": "localhost,127.0.0.1"
}
}
}
"""
###########################################################################
# write proxy data to a file
###########################################################################
def write_proxy(file_name, input_template, proxy_url):
context = {
'proxy_url' : proxy_url
}
template = string.Template(input_template)
data = template.substitute(context)
with open(file_name, "w") as fout:
fout.write(data)
print("wrote: " + file_name)
###########################################################################
# get the home directory of the original user
###########################################################################
def get_original_home():
user = os.environ['SUDO_USER']
if user:
home_dir = os.path.expanduser('~' + user)
else:
home_dir = os.path.expanduser('~')
return home_dir
###########################################################################
# write etc/apt/apt.conf
###########################################################################
def write_apt_conf(proxy_url):
write_proxy('/etc/apt/apt.conf', template_apt_conf, proxy_url)
###########################################################################
# write /etc/systemd/system/docker.service.d/override.conf
###########################################################################
def write_docker_service_override(proxy_url):
docker_service_d = '/etc/systemd/system/docker.service.d'
if not os.path.isdir(docker_service_d):
os.mkdir(docker_service_d)
override_conf = os.path.join(docker_service_d, "override.conf")
write_proxy(override_conf, template_docker_service_override, proxy_url)
###########################################################################
# write ~/.docker/config.json
###########################################################################
def write_docker_config(proxy_url):
# get the path of ~/.docker
home_dir = get_original_home()
docker_dir = os.path.join(home_dir, ".docker")
# create ~/.docker
if not os.path.isdir(docker_dir):
os.mkdir(docker_dir)
# get ~/.docker/config.json
config_json = os.path.join(docker_dir, "config.json")
write_proxy(config_json, template_config_json, proxy_url)
###########################################################################
# usage
###########################################################################
def usage():
print("usage: sudo docker-proxy.py proxy-url")
print("example: sudo docker-proxy.py http://192.168.11.61:3128")
def exec(command):
subprocess.call(command.split(), shell=False)
print("ran: " + command)
if __name__ == '__main__':
if len(sys.argv) != 2 or os.getuid() != 0:
usage()
sys.exit(1)
proxy_url = sys.argv[1]
exec('apt install -y docker.io docker-compose')
write_apt_conf(proxy_url)
write_docker_service_override(proxy_url)
write_docker_config(proxy_url)
exec('systemctl daemon-reload')
exec('systemctl restart docker')
https://gist.github.com/m-tmatma/4f5d3e8233c1040fa453d5857326fd4c
Install docker.
apt install -y docker.io docker-compose
Write the proxy settings to the following file. (Create a folder if necessary.)
/etc/apt/apt.conf
/etc/systemd/system/docker.service.d/override.conf
~/.docker/config.json
Execute the following command to reflect the docker daemon configuration file.
systemctl daemon-reload
systemctl restart docker
Recommended Posts