WSL中的代理和镜像

在使用WSL时常常会遇安装软件网络慢,甚至有些情况下连不上的问题。有两种解决思路:一是使用镜像网站,例如国内的阿里云,这样下载软件时直接从国内下载,访问起来更流畅;二是购买并设置代理,虽然资源依然下载自国外,但网络的路径有更多的选择,可以选择更通常的中继站点访问国外的资源。

国内镜像

阿里云:https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.3e221b11zqcULk
镜像的设置并不麻烦,在阿里云Ubuntu镜像中,进行如下替换:

用你熟悉的编辑器打开 /etc/apt/sources.list,替换默认的 archive.ubuntu.com/ 为 mirrors.aliyun.com

设置代理

WSL2与windows的网络是相互独立的,所以即使windows中设置了代理,WSL2中也不能直接访问。可以通过clash for linux在WSL2中再次设置一个代理,记录一下大致过程:

step1:从github下载对应的clash软件包
step2:使用gzip进行解压缩,例如gzip -d clash-linux-386-v1.11.8.gz,得到二进制文件clash-linux-386-v1.11.8
step3:将该文件修改为可执行文件chmod +x clash-linux-386-v1.11.8
step4:更新订阅信息wget -O ~/.config/clash/config.yaml 你的订阅(配置文件位于~/.config/clash/中);
step5:在系统中设置代理变量export http_proxy=localhost:7080 && export https_proxy=7080

在设置好代理之后,可以通过wget方式进行测试,比如访问google.com,在代理设置失败的情况下,你会得到类似下面的信息:

$ wget www.google.com
--2022-06-01 21:26:23--  http://www.google.com/
Resolving www.google.com (www.google.com)... 210.209.84.142, 2001::34af:950
Connecting to www.google.com (www.google.com)|210.209.84.142|:80...
failed: Connection timed out.
Connecting to www.google.com (www.google.com)|2001::34af:950|:80... failed: Network is unreachable.

而如果成功设置了代理,则会得到类似如下的信息:

$ wget www.google.com
--2022-06-01 21:25:51--  http://www.google.com/
Connecting to 127.0.0.1:9090... connected.
Proxy request sent, awaiting response... 200 OK
Length: 18 [application/json]
Saving to: ‘index.html’

index.html                         100%[===============================================================>]      18  --.-KB/s    in 0s

2022-06-01 21:25:51 (5.70 MB/s) - ‘index.html’ saved [18/18]

需要注意的是,ping命令在运行时不会使用代理,所以即使设置了代理,使用ping google.com也会ping不通。

### WSL 环境下 Docker Pull 失败的原因分析与解决方案 在 Windows Subsystem for Linux (WSL) 环境中运行 Docker 时,可能会遇到 `docker pull` 命令失败的情况。这种问题通常由网络连接异常、Docker 守护进程正常启动或其他配置错误引起。 #### 可能原因及对应解决方法 1. **Docker 服务正确启动** 如果 Docker 服务能成功启动,则可能导致任何基于 Docker 的操作(如镜像拉取)失败。可以通过以下命令检查 Docker 服务状态并尝试重新启动它: ```bash sudo systemctl status docker.service sudo systemctl restart docker.service ``` 若重启仍失败,可以进一步查阅日志文件以定位具体问题: ```bash journalctl -xeu docker.service ``` 2. **DNS 配置问题** DNS 解析失败可能是导致无法访问远程仓库的一个常见原因。可以在 `/etc/docker/daemon.json` 文件中指定自定义的 DNS 设置来解决问题。如果该文件不存在,请创建它,并添加如下内容: ```json { "dns": ["8.8.8.8", "8.8.4.4"] } ``` 修改完成后需重启 Docker 服务使更改生效[^3]。 3. **代理设置不当** 当处于需要使用 HTTP 或 HTTPS 代理才能上网的企业内部网环境中时,如果没有正确配置 Docker 使用这些代理也可能引发此类错误。同样是在上述提到过的 daemon.json 中加入类似下面这样的条目即可完成相应调整: ```json { ... "proxies": { "default": { "httpProxy": "http://your-http-proxy-url", "httpsProxy": "http://your-https-proxy-url" } } } ``` 4. **磁盘空间不足** 检查宿主机是否有足够的可用存储容量供下载新镜像之用。执行 df -h 查看各分区剩余量;必要的话清理不必要的旧数据释放更多空间后再试一次pull动作。 5. **防火墙或安全组规则阻碍通信** 对于某些特定场景下的部署而言(比如云实例),外部流量可能被本地或者平台层面的安全策略所拦截从而阻止了正常的请求交互过程发生。确认相关端口开放状况以及允许来自目标地址范围内的入站连接权限授予情况变得尤为重要。 6. **其他潜在因素** 包括但不限于版本兼容性冲突等问题也有可能成为诱因之一。建议升级到最新稳定版软件包组合形式加以规避风险的同时还能享受到官方持续优化带来的性能提升效果等方面的好处[^1][^2]。 ```python import subprocess def check_docker_status(): try: result = subprocess.run(['sudo', 'systemctl', 'status', 'docker.service'], capture_output=True, text=True) if "active (running)" not in result.stdout: print("Docker service is not running properly.") return False else: print("Docker service is active and running.") return True except Exception as e: print(f"An error occurred while checking Docker service status: {e}") return None if __name__ == "__main__": check_docker_status() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值