当前位置: 首页 > news >正文

WSL Ubuntu Docker 代理自动配置教程

WSL Ubuntu Docker 代理自动配置教程

WSL Ubuntu Docker 代理自动配置教程

背景说明

在 WSL2 环境下使用 Docker 时,由于网络环境限制,经常需要通过 Windows 主机上的代理来访问 Docker Hub。但每次 Windows 重启后,WSL 获取到的主机 IP 地址可能会发生变化,导致 Docker 代理配置失效。

本教程将帮你配置一个自动化方案,让 Docker 在每次 WSL 启动时都能自动获取最新的 Windows 主机 IP 并配置代理。

解决的问题

  1. IP 地址动态变化:自动获取最新的 Windows 主机 IP
  2. 开机自动配置:WSL 启动时自动设置 Docker 代理
  3. 避免重复执行:只在系统层面执行一次,不会每次打开终端都重复设置
  4. 时序问题:确保在 Docker 启动前就配置好代理

前提条件

  • WSL2 Ubuntu 系统
  • Docker 已安装并可正常运行
  • Windows 上运行着代理服务(本教程以 7890 端口为例)

配置步骤

步骤 1:创建代理配置脚本

创建专门用于 systemd 服务的 Docker 代理配置脚本:

# 创建脚本文件
nano ~/setup_docker_proxy_systemd.sh

脚本内容:

#!/bin/bash# 专门给 systemd 服务使用的 Docker 代理配置脚本
# 此脚本以 root 身份运行,不需要使用 sudo# 获取 Windows 宿主机 IP
HOST_IP=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
PROXY_PORT=7890echo "Setting up Docker proxy with Windows host IP: $HOST_IP:$PROXY_PORT"# 检查代理是否可用(可选,失败不会阻止执行)
if ! timeout 2 nc -z $HOST_IP $PROXY_PORT 2>/dev/null; thenecho "Warning: Proxy server not reachable at $HOST_IP:$PROXY_PORT"
fi# 创建 Docker systemd 代理配置文件
mkdir -p /etc/systemd/system/docker.service.d# 动态生成代理配置文件
cat > /etc/systemd/system/docker.service.d/http-proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://${HOST_IP}:${PROXY_PORT}"
Environment="HTTPS_PROXY=http://${HOST_IP}:${PROXY_PORT}"
Environment="NO_PROXY=localhost,127.0.0.1,::1,10.0.0.0/8,192.168.0.0/16,172.16.0.0/12"
EOF# 重新加载 systemd 配置
systemctl daemon-reloadecho "Docker proxy configuration updated for host IP: $HOST_IP:$PROXY_PORT"

给脚本添加执行权限:

chmod +x ~/setup_docker_proxy_systemd.sh

步骤 2:创建 systemd 服务

创建 systemd 服务配置文件:

# 创建服务文件
nano ~/docker-proxy-update.service

服务文件内容:

[Unit]
Description=Update Docker proxy with current Windows host IP
After=network.target
Before=docker.service[Service]
Type=oneshot
ExecStart=/home/user/setup_docker_proxy_systemd.sh
RemainAfterExit=yes
User=root[Install]
WantedBy=multi-user.target

注意:请将 /home/user/ 替换为你的实际用户主目录路径。

步骤 3:安装并启用服务

# 复制服务文件到系统目录
sudo cp docker-proxy-update.service /etc/systemd/system/# 重新加载 systemd 配置
sudo systemctl daemon-reload# 启用服务(开机自启)
sudo systemctl enable docker-proxy-update.service# 启动服务进行测试
sudo systemctl start docker-proxy-update.service

步骤 4:验证配置

检查服务状态:

# 查看服务状态
sudo systemctl status docker-proxy-update.service# 查看生成的配置文件
cat /etc/systemd/system/docker.service.d/http-proxy.conf# 验证 Docker 环境变量
sudo systemctl show docker --property=Environment

重启 Docker 服务以应用配置:

sudo systemctl restart docker

步骤 5:测试 Docker 代理

测试是否能正常拉取镜像:

# 测试拉取小镜像
sudo docker pull hello-world# 测试拉取稍大的镜像
sudo docker pull nginx:alpine

如果能成功拉取,说明代理配置成功!

清理旧配置(可选)

如果之前在 .bashrc 中配置过 Docker 代理,建议清理掉避免冲突:

# 编辑 .bashrc
nano ~/.bashrc# 删除或注释掉类似以下的行:
# ~/setup_docker_proxy.sh
# (~/setup_docker_proxy.sh > /dev/null 2>&1 &)

工作原理

  1. 启动时机:WSL 启动 → systemd 启动 → docker-proxy-update.service 运行
  2. IP 获取:服务从 /etc/resolv.conf 动态获取最新的 Windows 主机 IP
  3. 配置生成:自动生成 /etc/systemd/system/docker.service.d/http-proxy.conf 文件
  4. Docker 应用:Docker 服务启动时自动读取代理配置

文件结构

配置完成后,相关文件分布如下:

/home/user/
├── setup_docker_proxy_systemd.sh          # 代理配置脚本
└── docker-proxy-update.service            # 服务配置文件(备份)/etc/systemd/system/
├── docker-proxy-update.service            # systemd 服务文件
└── docker.service.d/└── http-proxy.conf                     # Docker 代理配置文件

故障排除

问题 1:服务启动失败

# 查看详细错误信息
sudo journalctl -u docker-proxy-update.service -f

问题 2:代理不生效

# 检查代理服务器是否可达
nc -z $(cat /etc/resolv.conf | grep nameserver | awk '{print $2}') 7890# 手动重新运行配置脚本
sudo ~/setup_docker_proxy_systemd.sh# 重启 Docker
sudo systemctl restart docker

问题 3:IP 地址变化后代理失效

由于服务只在启动时运行一次,如果 Windows 重启后 IP 变化,需要:

# 重新运行服务
sudo systemctl start docker-proxy-update.service# 或者重启 WSL(推荐)

自定义配置

修改代理端口

如果你的代理端口不是 7890,修改脚本中的 PROXY_PORT 变量:

# 编辑脚本
nano ~/setup_docker_proxy_systemd.sh# 修改这一行
PROXY_PORT=你的端口号

添加更多 NO_PROXY 地址

如果需要排除更多地址不走代理,修改脚本中的 NO_PROXY 环境变量。

验证清单

  • 脚本文件已创建并有执行权限
  • systemd 服务已安装并启用
  • 服务运行状态正常
  • Docker 配置文件已生成
  • Docker 能成功拉取镜像
  • 重启 WSL 后代理仍然生效

总结

通过这个配置方案,你的 WSL Ubuntu Docker 将能够:

  1. 自动适应 IP 变化:每次启动都获取最新的 Windows 主机 IP
  2. 开机即可用:无需手动配置,WSL 启动后 Docker 代理自动生效
  3. 一次配置,长期使用:无需重复操作,稳定可靠

现在你可以愉快地使用 docker pull 命令,无论何时重启都不用担心代理配置问题了!


文章转载自:

http://IZqIns6U.pznqt.cn
http://7oqFko29.pznqt.cn
http://3F1rYPbD.pznqt.cn
http://b3GQ5F7e.pznqt.cn
http://KzmKJYQs.pznqt.cn
http://AVy5DWXx.pznqt.cn
http://YJfryg2D.pznqt.cn
http://NL592jex.pznqt.cn
http://3ZRvrvae.pznqt.cn
http://y0emisHz.pznqt.cn
http://eUZQ9wnb.pznqt.cn
http://sJ6XERJK.pznqt.cn
http://5OLAp02C.pznqt.cn
http://P1RUJb9M.pznqt.cn
http://cKLCnds1.pznqt.cn
http://3QtoKoMe.pznqt.cn
http://HgpBzgMw.pznqt.cn
http://PqnZ4QKx.pznqt.cn
http://hl44X7cX.pznqt.cn
http://NrLMs6o0.pznqt.cn
http://ZHroD0uS.pznqt.cn
http://chc5FxOk.pznqt.cn
http://zmVePjMW.pznqt.cn
http://oCqLFNxm.pznqt.cn
http://lzHJEsv2.pznqt.cn
http://9m11ncam.pznqt.cn
http://fE0vk426.pznqt.cn
http://Gb9oWhQI.pznqt.cn
http://AOpu6PoF.pznqt.cn
http://5eCaMaW8.pznqt.cn
http://www.dtcms.com/a/370031.html

相关文章:

  • 基于Scikit-learn集成学习模型的情感分析研究与实现
  • MySQL数据库精研之旅第十七期:深度拆解事务核心(下)
  • Scikit-learn Python机器学习 - 特征降维 压缩数据 - 特征选择 - 单变量特征选择 SelectKBest - 选择Top K个特征
  • 从挑西瓜到树回归:用生活智慧理解机器学习算法
  • LabVIEW无线预警喷淋系统
  • Redis 的三种高效缓存读写策略!
  • 安装MATLAB205软件记录
  • Day28 打卡
  • 【FastDDS】XTypes Extensions
  • 软考 系统架构设计师系列知识点之杂项集萃(142)
  • 【音视频】H264编码参数优化和cbr、vbr、crf模式设置
  • 软考 系统架构设计师系列知识点之杂项集萃(141)
  • 竞价代运营:百度竞价账户托管优化
  • Python实战:爬取百度热搜榜,制作动态可视化报告
  • Windows 设备音频录制 | WASAPI 音频数据采集 / 环回录制
  • uniapp新增页面及跳转配置方法
  • 西门子S7-200 SMART PLC:编写最基础的“起保停”程序
  • UDP-Server(2)词典功能
  • 最大似然估计:损失函数的底层数学原理
  • 今日分享:C++ -- list 容器
  • 报错:OverflowError: Python integer 4294967296 out of bounds for uint32
  • 贪心算法应用:蛋白质折叠问题详解
  • AI-调查研究-71-具身智能 案例分析:从ROS到Tesla Optimus的开源与商业化实践
  • 【嵌入式C语言】七
  • [数据结构] LinkedList
  • 【C++】引用的本质与高效应用
  • Date、BigDecimal类型值转换
  • 基于Node.js和Three.js的3D模型网页预览器
  • Scikit-learn Python机器学习 - 特征降维 压缩数据 - 特征提取 - 主成分分析 (PCA)
  • CSP-J/S IS COMING