svn: E000111: Error running context: Connection refused

1、具体报错:

看起来是window主机的子系统ubuntu svn客户端无法访问到window主机的svn的服务端。

2、问题:

window主机安装子系统ubuntu,ubuntu是可以直接访问外网,但是ubuntu是不能访问window主机的服务,比如svn的server,这让人比较费解。

3、大概原因:

经过长达几个小时的找资料,问题解决了,原因应该是Ubuntu访问window无法dns域名解析,就无法得知访问的ip和端口。

4、解决方案:

直接新增和修改.wslconfig,WLS本身就是网络代理转发的工具,为了管理window主机和子系统的网络。

5、具体配置方式:

在 WSL 上运行的所有已安装分发版中使用 .wslconfig 配置全局设置

  • 默认情况下,.wslconfig 文件不存在。必须创建它并将其存储在您的目录中才能应用这些配置设置。%UserProfile%
  • 用于在作为 WSL 2 版本运行的所有已安装 Linux 发行版中全局配置设置。
  • 只能用于 WSL 2 运行的发行版。作为 WSL 1 运行的分发版不会受到此配置的影响,因为它们不作为虚拟机运行。
  • 要访问您的目录,请在 PowerShell 中使用 访问您的主目录(通常是您的用户配置文件),或者您可以打开 Windows 文件资源管理器并在地址栏中输入。目录路径应如下所示: .%UserProfile%``cd ~``C:\Users\<UserName>``%UserProfile%``C:\Users\<UserName>\.wslconfig

WSL 将检测这些文件是否存在,读取内容,并在每次启动 WSL 时自动应用配置设置。如果文件缺失或格式不正确(标记格式不正确),WSL 将继续正常启动,而不应用配置设置。

6、.wslconfig文件内容如下:

配置完成后,在window终端执行:wsl -shutdowm 和 wsl,目的是重启下wsl服务和Ubuntu子系统。

重点:此配置:网络模式为镜像模式非NAT模式,官网建议用镜像模式,可以解决很多网络疑难杂症。

bash 复制代码
# Settings apply across all Linux distros running on WSL 2
[wsl2]

# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=4GB 

# Sets the VM to use two virtual processors
processors=4

# Sets additional kernel parameters, in this case enabling older Linux base images such as Centos 6
kernelCommandLine = vsyscall=emulate

# Sets amount of swap storage space to 8GB, default is 25% of available RAM
swap=8GB

# Disable page reporting so WSL retains all allocated memory claimed from Windows and releases none back when free
pageReporting=false

# Turn on default connection to bind WSL 2 localhost to Windows localhost. Setting is ignored when networkingMode=mirrored
localhostforwarding=true

# Disables nested virtualization
nestedVirtualization=false

# Turns on output console showing contents of dmesg when opening a WSL 2 distro for debugging
debugConsole=true

# If the value is mirrored then this turns on mirrored networking mode. Default or unrecognized strings result in NAT networking.
# 如果值为 mirrored,则会启用镜像网络模式。 默认或无法识别的字符串会生成 NAT 网络。
networkingMode=mirrored

#Setting this to true allows the Windows Firewall rules, as well as rules specific to Hyper-V traffic, to filter WSL network traffic.
firewall=true

#更改将 DNS 请求从 WSL 代理到 Windows 的方式
dnsTunneling=true
# Enable experimental features
[experimental]
sparseVhd=true
hostAddressLoopback=true

7、配置完成后功能正常:

8、如果还无法解决

采取B方案,svn服务器的链接改为ip地址开头也就是说HuijiongLi改为127.0.0.1:443即可访问;子系统和window主机都是走这个地址进行分发。想一劳永逸的话,在svn服务器上面也可以改为ip模式。这样生成的svn的url就是无缝连接的了。例如:https://127.0.0.1/svn/office/project/cmaketest/trunk