Centos7配置代理安装最新版Docker并拉取镜像

项目介绍

"cat"不过多介绍就是你想的那个代理软件 温馨提示文章中所有名字已被修改为"cat",自行修改为原样

侵权联系删除,软件来自于魔戒,感谢魔戒官方提供的软件包

此项目是通过使用开源项目(https://github.com/Dreamacro/`"cat"`)作为核心程序,再结合脚本实现简单的代理功能。

主要是为了解决我们在服务器上下载GitHub等一些国外资源速度慢的问题。

使用须知

  • 运行本项目建议使用root用户,或者使用 sudo 提权。
  • 使用过程中如遇到问题,请优先查已有的 issues
  • 在进行issues提交前,请替换提交内容中是敏感信息(例如:订阅地址)。
  • 本项目是基于 "cat"yacd 进行的配置整合,关于"cat"、yacd的详细配置请去原项目查看。
  • 此项目不提供任何订阅信息,请自行准备"cat"订阅地址。
  • 运行前请手动更改.env文件中的"cat"_URL变量值,否则无法正常运行。
  • 当前在RHEL系列和Debian系列Linux系统中测试过,其他系列可能需要适当修改脚本。
  • 支持 x86_64/aarch64 平台

注意 :当你在使用此项目时,遇到任何无法独自解决的问题请优先前往 Issues 寻找解决方法。由于空闲时间有限,后续将不再对Issues中 "已经解答"、"已有解决方案" 的问题进行重复性的回答。

使用教程

下载项目

bash 复制代码
$ git clone https://github.com/wanhebin/"cat"-for-linux.git

进入到项目目录,编辑.env文件,修改变量"cat"_URL的值。

bash 复制代码
$ cd "cat"-for-linux
$ vim .env

注意: .env 文件中的变量 "cat"_SECRET 为自定义 "cat" Secret,值为空时,脚本将自动生成随机字符串。

启动程序

直接运行脚本文件start.sh

  • 进入项目目录
bash 复制代码
$ cd "cat"-for-linux
  • 运行启动脚本
bash 复制代码
$ sudo bash start.sh

正在检测订阅地址...
"cat"订阅地址可访问!                                      [  OK  ]

正在下载"cat"配置文件...
配置文件config.yaml下载成功!                              [  OK  ]

正在启动"cat"服务...
服务启动成功!                                             [  OK  ]

"cat" Dashboard 访问地址:http://<ip>:9090/ui
Secret:xxxxxxxxxxxxx

请执行以下命令加载环境变量: source /etc/profile.d/"cat".sh

请执行以下命令开启系统代理: proxy_on

若要临时关闭系统代理,请执行: proxy_off
bash 复制代码
$ source /etc/profile.d/"cat".sh
$ proxy_on
  • 检查服务端口
bash 复制代码
$ netstat -tln | grep -E '9090|789.'
tcp        0      0 127.0.0.1:9090          0.0.0.0:*               LISTEN     
tcp6       0      0 :::7890                 :::*                    LISTEN     
tcp6       0      0 :::7891                 :::*                    LISTEN     
tcp6       0      0 :::7892                 :::*                    LISTEN
  • 检查环境变量
bash 复制代码
$ env | grep -E 'http_proxy|https_proxy'
http_proxy=http://127.0.0.1:7890
https_proxy=http://127.0.0.1:7890

以上步鄹如果正常,说明服务"cat"程序启动成功,现在就可以体验高速下载github资源了。

重启程序

如果需要对"cat"配置进行修改,请修改 conf/config.yaml 文件。然后运行 restart.sh 脚本进行重启。

注意:

重启脚本 restart.sh 不会更新订阅信息。

停止程序

  • 进入项目目录
bash 复制代码
$ cd "cat"-for-linux
  • 关闭服务
bash 复制代码
$ sudo bash shutdown.sh

服务关闭成功,请执行以下命令关闭系统代理:proxy_off
bash 复制代码
$ proxy_off

然后检查程序端口、进程以及环境变量http_proxy|https_proxy,若都没则说明服务正常关闭。

"cat" Dashboard

  • 访问 "cat" Dashboard

通过浏览器访问 start.sh 执行成功后输出的地址,例如:http://192.168.0.1:9090/ui

  • 登录管理界面

API Base URL一栏中输入:http://<ip>:9090 ,在Secret(optional)一栏中输入启动成功后输出的Secret。

点击Add并选择刚刚输入的管理界面地址,之后便可在浏览器上进行一些配置。

  • 更多教程

此 "cat" Dashboard 使用的是yacd项目,详细使用方法请移步到yacd上查询。

常见问题

  1. 部分Linux系统默认的 shell /bin/sh 被更改为 dash,运行脚本会出现报错(报错内容一般会有 -en [ OK ])。建议使用 bash xxx.sh 运行脚本。

  2. 部分用户在UI界面找不到代理节点,基本上是因为厂商提供的"cat"配置文件是经过base64编码的,且配置文件格式不符合"cat"配置标准。

    目前此项目已集成自动识别和转换"cat"配置文件的功能。如果依然无法使用,则需要通过自建或者第三方平台(不推荐,有泄露风险)对订阅地址转换。

  3. 程序日志中出现error: unsupported rule type RULE-SET报错,解决方法查看官方WIKI

无法登录Web界面

确保 RESTful API 正确

shell 复制代码
[root@localhost "cat"-for-linux-master]# vim conf/config.yaml 

# HTTP 代理端口
port: 7890

# SOCKS5 代理端口
socks-port: 7891

# Linux 和 macOS 的 redir 代理端口
redir-port: 7892

# 允许局域网的连接
allow-lan: true

# 规则模式:Rule(规则) / Global(全局代理)/ Direct(全局直连)
mode: rule

# 设置日志输出级别 (默认级别:silent,即不输出任何内容,以避免因日志内容过大而导致程序内存溢出)。
# 5 个级别:silent / info / warning / error / debug。级别越高日志输出量越大,越倾向于调试,若需要请自行开启。
log-level: silent
# "cat" 的 RESTful API
external-controller: '0.0.0.0:9090'

# RESTful API 的口令
secret: 'Abc@1234'

配置Docker代理

Dockerd 代理

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

shell 复制代码
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf

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

shell 复制代码
cat > /etc/systemd/system/docker.service.d/proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
EOF

要换成可用的免密代理。通常使用 cntlm 在本机自建免密代理,去对接公司的代理。可参考《Linux下安装配置Cntlm 代理》

Container 代理

在容器运行阶段,如果需要代理上网,则需要配置 ~/.docker/config.json。以下配置,只在Docker 17.07及以上版本生效。

shell 复制代码
mkdir ~/.docker/
cat > ~/.docker/config.json << EOF
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:7890",
     "httpsProxy": "http://127.0.0.1:7890",
     "noProxy": "localhost,127.0.0.1,.example.com"
   }
 }
}
EOF

这个是用户级的配置,除了 proxies,docker login 等相关信息也会在其中。而且还可以配置信息展示的格式、插件参数等。

此外,容器的网络代理,也可以直接在其运行时通过 -e 注入 http_proxy 等环境变量。这两种方法分别适合不同场景。config.json 非常方便,默认在所有配置修改后启动的容器生效,适合个人开发环境。在CI/CD的自动构建环境、或者实际上线运行的环境中,这种方法就不太合适,用 -e 注入这种显式配置会更好,减轻对构建、部署环境的依赖。当然,在这些环境中,最好用良好的设计避免配置代理上网。

Docker Build 代理

虽然 docker build 的本质,也是启动一个容器,但是环境会略有不同,用户级配置无效。在构建时,需要注入 http_proxy 等参数。

shell 复制代码
docker build . \
    --build-arg "HTTP_PROXY=http://127.0.0.1:7890/" \
    --build-arg "HTTPS_PROXY=http://127.0.0.1:7890/" \
    --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
    -t your/image:tag

注意:无论是 docker run 还是 docker build,默认是网络隔绝的。如果代理使用的是 localhost:3128 这类,则会无效。这类仅限本地的代理,必须加上 --network host 才能正常使用。而一般则需要配置代理的外部IP,而且代理本身要开启 Gateway 模式。

命令行代理

shell 复制代码
docker run -it --env HTTP_PROXY="http://127.0.0.1:7890" --env HTTPS_PROXY="http://127.0.0.1:7890" ubuntu bash

查看Docker配置信息

shell 复制代码
[root@localhost "cat"-for-linux-master]# docker info | grep -i proxy
...
 HTTP Proxy: http://127.0.0.1:7890
 HTTPS Proxy: http://127.0.0.1:7890
 No Proxy: localhost,127.0.0.1,.example.com
...

重启服务

shell 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

NO_Proxy优化

在配置 NO_PROXY 时,你需要确保它覆盖到所有你不希望通过代理的域名和 IP 地址。通常情况下,NO_PROXY 可以包括以下几类:

  1. 本地主机localhost, 127.0.0.1, ::1 (IPv6 本地地址)
  2. 内部网络 :常见的内部网络 IP 段如 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 等。
  3. 特定域名:如果你的内部服务使用特定域名或者子域名,可以将它们添加进去。

以下是一个优化的 NO_PROXY 配置示例:

bash 复制代码
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1,::1,.example.com,.localdomain,.aliyun.com,mirrors.aliyun.com,mirrors.aliyuncs.com,mirrors.cloud.aliyuncs.com
解释:
  • localhost,127.0.0.1,::1:本地环回地址。
  • 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16:常见的私有 IP 地址范围,用于确保内网流量不会通过代理。
  • .example.com:对于 example.com 的所有子域名都不使用代理。
  • .localdomain:假设你有一个内网的局域网域名,可以像这样添加。
  • .aliyun.com 覆盖所有阿里云的子域名。
  • mirrors.aliyun.commirrors.aliyuncs.commirrors.cloud.aliyuncs.com 是你的 YUM 源配置文件中提到的阿里云镜像站的域名。

配置Containerd代理

创建文件

  1. 创建 containerd.service.d 目录:
bash 复制代码
mkdir -p /etc/systemd/system/containerd.service.d/
  1. 创建或编辑 /etc/systemd/system/containerd.service.d/http-proxy.conf 文件 :
    使用 cat 命令创建或编辑 http-proxy.conf 文件:
bash 复制代码
cat > /etc/systemd/system/containerd.service.d/http-proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local,<nodeCIDR>,<APIServerInternalURL>,<serviceNetworkCIDRs>,<etcdDiscoveryDomain>,<clusterNetworkCIDRs>,<platformSpecific>,<REST_OF_CUSTOM_EXCEPTIONS>,.example.com,.localdomain,.aliyun.com,mirrors.aliyun.com,mirrors.aliyuncs.com,mirrors.cloud.aliyuncs.com"
EOF

重启 containerd 服务

  1. 重新加载 systemd 配置:
bash 复制代码
systemctl daemon-reload
  1. 重启 containerd:
bash 复制代码
systemctl restart containerd

NO_PROXY 的推荐配置

NO_PROXY 中配置以下地址和网段可以确保这些流量不会经过代理:

  • 本地地址和网段:

    • localhost
    • 127.0.0.1
    • ::1
    • 127.0.0.0/8
  • Kubernetes 的默认域名后缀:

    • .svc
    • .cluster.local
  • Kubernetes Node 网段 : <nodeCIDR>

    • 这个网段代表所有 Kubernetes 节点的 IP 地址范围。
  • APIServer 的内部 URL : <APIServerInternalURL>

    • 这通常是集群内部用于访问 Kubernetes API Server 的地址。
  • Service Network 网段 : <serviceNetworkCIDRs>

    • Kubernetes Service 的网络范围。
  • etcd 的 Discovery Domain : <etcdDiscoveryDomain>

    • 如果有使用 etcd 的发现服务,需要添加对应的域名。
  • Cluster Network 网段 : <clusterNetworkCIDRs>

    • 这个代表集群中使用的网络范围。
  • 其他内网网段:

    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16
  • 其他特定平台相关网段 : <platformSpecific>

    • 例如 DevOps 工具的网段,Git 仓库等。
  • 其他自定义 NO_PROXY 网段 : <REST_OF_CUSTOM_EXCEPTIONS>

    • 任何需要特殊处理的例外网段。
相关推荐
feng_blog66881 小时前
【docker-1】快速入门docker
java·docker·eureka
贾贾20231 小时前
配电自动化系统“三区四层”数字化架构
运维·科技·架构·自动化·能源·制造·智能硬件
远方 hi3 小时前
linux如何修改密码,要在CentOS 7系统中修改密码
linux·运维·服务器
元气满满的热码式3 小时前
K8S中Service详解(一)
云原生·容器·kubernetes
资讯分享周4 小时前
过年远控家里电脑打游戏,哪款远控软件最好用?
运维·服务器·电脑
chaodaibing4 小时前
记录一次k8s起不来的排查过程
运维·服务器·k8s
mcupro5 小时前
提供一种刷新X410内部EMMC存储器的方法
linux·运维·服务器
不知 不知6 小时前
最新-CentOS 7 基于1 Panel面板安装 JumpServer 堡垒机
linux·运维·服务器·centos
BUG 4046 小时前
Linux--运维
linux·运维·服务器
MXsoft6186 小时前
华为E9000刀箱服务器监控指标解读
大数据·运维