常用代理配置

在开发过程中,由于众所周知的原因,不可避免的要使用代理,而各个软件使用代理的方式不尽相同,本文对常用软件的代理设置进行简单的整理。

Shell

最方便的就是直接在命令行里面设置代理,这样设置后大部分在命令行里执行的程序,设置方式如下:

1
2
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890

也可以将上述命令写入 ~/.bashrc 文件中自动执行

为便于书写,这里统一使用猫猫头软件的默认端口 7890,实际使用时根据代理服务端口进行相应修改即可

Docker

Docker 使用代理主要分为以下几种情形:

  1. docker 本身通过代理来下载镜像
  2. docker build 构建镜像时执行的命令使用代理进行访问
  3. docker run 运行容器时容器内部使用 host 主机的代理进行访问

接下来对这几种情况的代理配置逐一说明

1. Docker 本身代理配置

在执行docker pull时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置。

1
2
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf

在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容:

1
2
3
4
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

重启生效

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

2. Docker build 代理配置

1
2
3
4
5
docker build \
--build-arg http_proxy=http://proxy:7890 \
--build-arg https_proxy=http://proxy:7890 \
--network=host \
-t image_name:image_version \

3. Docker run 代理配置

docker run 使用主机代理

Wget

wget 通常用来下载文件,部分时候也会用到代理。wget 通过代理访问主要有以下三种方式:

  1. 直接设置系统环境变量

  2. 修改配置文件:

    编辑配置文件:

    1
    vim ~/.wgetrc

    写入以下内容即可:

    1
    2
    3
    http_proxy=http://127.0.0.1:7890
    https_proxy=http://127.0.0.1:7890
    use_proxy=on
  3. 使用-e参数

    1
    wget -e "http_proxy=http://127.0.0.1:7890" -e "https_proxy=http://127.0.0.1:7890" https://google.com

Microsoft Store

这个要单独拉出来讲一讲(点名批评),因为这个玩意他不但不走系统代理,而且在开系统代理之后会连接不上服务器。

1
CheckNetIsolation.exe loopbackexempt -a -p=S-1-15-2-1609473798-1231923017-684268153-4268514328-882773646-2760585773-1760938157

参考资料

  1. 如何优雅的给 Docker 配置网络代理 - CharyGao - 博客园 (cnblogs.com)