- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSite:http://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/139562987
HuaWei:https://bbs.huaweicloud.com/blogs/428728
本文全在合规范围内进行讲解,不包含跨越不可抗力阻扰内容,主要为多数能够自行通过合法途径科学上网的技术人在特定环境下介绍配置Docker代理。
【介绍】:本文主要关于在一台windows上为另外Linux主机上Docker提供代理访问的相关步骤。
目 录
1. 背景描述
想必大陆地区很多免费镜像停服如上交Docker镜像,给很多自己在做Docker相关项目的小伙伴带来了一些没有必要的麻烦。其实我个人而言主要使用的还是官方源,不论是虚拟机还是物理机,主要是镜像更新全面和及时。
因此我想介绍在一个局域网内,使用一台主机作为代理服务,其它主机通过这个服务访问外网,进而配置Docker代理的步骤。
本文全在合规范围内进行讲解,不包含跨越不可抗力阻扰内容
,主要为多数能够自行通过合法途径科学上网的技术人在特定环境下介绍配置Docker代理。
这里一个具体背景描述如下:
我有一个外网服务器可惜之只能运行于Windows/Mac系统上,但是目前我希望在另外一台同网段Linux主机上通过代理访问外网流量。现在需要做的事情如下:
在Windows主机上,假设设置外网服务监听的是7890
端口,但是默认情况下,它仅仅针对于当前主机有效,也就是说,外网服务监听的是本地。
在其它的所有同一网络的Liniux主机上,通过这台Windows的代理服务访问外网,进而使用Docker官方源。
2. 代理服务端主机的操作 2.1 开启代理监听这个部分不需要讲解,一般看文章的人都是高手。
2.2 暂时关闭防火墙确保Windows防火墙已经关闭。可以临时禁用防火墙来进行测试:
netsh advfirewall set allprofiles state off
3. Linix上使用代理后续停用时请记得重新启用防火墙:
netsh advfirewall set allprofiles state on
你可以依据自己的需要选择一种方式。
3.1 proxychains代理方式要在同网段的Ubuntu主机上使用Windows主机上的VPN代理,你可以按照以下步骤进行配置:
-
确保Windows主机上的Clash和Nginx都已经正确配置并启动,并且Windows防火墙允许其他主机访问Nginx监听的端口(如7890)。
-
在Ubuntu主机上,打开终端。
-
安装proxychains,它是一个命令行工具,可以让任何程序通过代理运行。可以使用以下命令安装:
sudo apt update
sudo apt install proxychains
- 配置proxychains。打开proxychains的配置文件:
sudo vim /etc/proxychains.conf
- 在配置文件的末尾,按照下面的格式编写添加代理:
http 服务端主机IP VPN服务端口号
这里你应该修改为你自己启用的服务端IP和端口号,比如:
http 192.168.31.6 7890
-
保存文件并退出编辑器。
-
现在,可以通过在命令前加上
proxychains
来使任何命令通过代理运行。例如:
proxychains curl https://www.google.com
这将通过代理访问Google。
3.2 全局代理方式如果你想让整个系统都使用代理,可以设置环境变量http_proxy
和https_proxy
:
export http_proxy=http://服务端主机IP:VPN服务端口号
export https_proxy=http://服务端主机IP:VPN服务端口号
例如:
export http_proxy=http://192.168.31.6:7890
export https_proxy=http://192.168.31.6:7890
然后在远程到外网的服务端(我这里为:192.168.31.236
的一台主机),在客户端主机上,测试服务端主机``
curl --proxy http://192.168.31.6:7890 https://www.google.com
3.3 永久全局代理方式
有些场景下,为了避免每次都手动设置环境变量,你可以将这些环境变量添加到你的shell配置文件中(如~/.bashrc
或~/.bash_profile
),这样每次启动终端时都会自动加载这些设置。
vim ~/.bashrc
然后在文件末尾添加以下行:
export http_proxy=http://服务端主机IP:VPN服务端口号
export https_proxy=http://服务端主机IP:VPN服务端口号
例如:
export http_proxy=http://192.168.31.6:7890
export https_proxy=http://192.168.31.6:7890
保存并退出编辑器,然后使更改生效:
source ~/.bashrc
4. 为Docker使用代理
4.1 为什么
在内地网络环境中,直接访问外网可能会受到限制或速度较慢。通过配置代理服务器,可以绕过这些限制并加速访问外网资源。对于Docker来说,配置代理服务器可以显著提高拉取镜像的速度,特别是在需要频繁拉取和更新镜像的开发和测试环境中。
4.2 操作步骤 4.2.1 创建Docker配置文件(如果不存在)sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf
4.2.2 添加代理设置
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
在配置文件中,添加以下内容:
[Service]
Environment="HTTP_PROXY=http://服务端主机IP:VPN服务端口号"
Environment="HTTPS_PROXY=http://服务端主机IP:VPN服务端口号"
Environment="NO_PROXY=localhost,127.0.0.1"
例如:
[Service]
Environment="HTTP_PROXY=http://192.168.31.6:7890"
Environment="HTTPS_PROXY=http://192.168.31.6:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
这里我使用的依然是192.168.31.6和端口7890。请将http://192.168.31.6:7890
替换为你实际的代理服务器地址和端口。
NO_PROXY
环境变量指定了不应该通过代理访问的主机或域名,通常包括本地主机和回环地址。
- 重新加载Docker服务配置:
sudo systemctl daemon-reload
- 重启Docker服务:
sudo systemctl restart docker
5. 检查与测试效果
你可以使用docker info
验证代理设置是否生效:
docker info
你可以在输出中看到这个格式:
HTTP Proxy: http://服务端主机IP:VPN服务端口号
HTTPS Proxy: http://服务端主机IP:VPN服务端口号
比如:
HTTP Proxy: http://192.168.31.6:7890
HTTPS Proxy: http://192.168.31.6:7890
如图所示:
现在我们可以试试拉取官方镜像看看是否很快拉取成功:
可见瞬间就成功拉取了,说明通过代理成功。
最后停用时,请记得在Windows主机侧重新启用防火墙:
netsh advfirewall set allprofiles state on