Linux和Docker使用代理上网
公设
代理服务的通信协议、域名及端口为http://127.0.0.1:7890或http://proxy.example.com:8080,下文根据具体情况修改。
搭建代理服务
TODO
在系统中使用[1]
临时配置
在需要代理的终端中运行
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
注:很多教程用http_proxy和https_proxy,但是实测有些程序区分大小写并且只识别HTTP_PROXY和HTTPS_PROXY,还有文章报告[3]有些程序只识别http_proxy和https_proxy,所以推荐都写。
永久配置
将上述命令加入shell配置文件,如.bashrc或.zshrc,再次不再赘述。
特定软件的设置
apt
apt配置文件
/etc/apt/apt.conf加入:apt.conf 1
Acquire::http::Proxy "http://127.0.0.1:7890"
git
运行
git config --global http.proxy 'socks5://127.0.0.1:1080' git config --global https.proxy 'socks5://127.0.0.1:1080'
本节皆没测过,也许能用
在Docker中使用
Docker进程(Docker命令中)[2]
docker命令由守护进程dockerd执行,因此需要配置其管理者systemd。
在/etc/systemd/system/docker.service.d/proxy.conf(不存在则创建)输入
1 | [Service] |
no_proxy相关介绍可以查阅[3]。
设置完成后要重启systemd和dockerd:
sudo systemctl daemon-reload
sudo systemctl restart docker
容器中代理
方法一:Docker配置[2]
在~/.docker/config.json文件中写入:
1 | { |
注意:该方法对所有容器生效,且需要Docker版本在17.07以上。
方法二:配置环境变量
参考在Linux系统中配置的方法,通过配置容器容器环境变量实现。例如启动容器时使用-e参数,送入httpProxy和httpsProxy环境变量。具体方法参阅相关资料。
注意:该方法仅对当前容器有效。
构建容器过程中代理
构建容器时也启动了一个容器,但是不应当配置镜像的环境变量以避免后效。因此使用--build-arg配置仅在构建时有效的环境变量。
例如:
docker build -t your/image:tag \
--build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \
--build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \
--build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
.