我在 Windows 10 上使用 WSL2 运行 Ubuntu 20.04。
我正在尝试通过 Python 连接到我的机器 127.0.0.1 上的比特币测试网服务器
Python 脚本在 Pycharm、命令提示符和 Powershell 上运行良好,直到最近我在 WSL1 上运行它时,在 Ubuntu 中也运行良好
切换到适用于 Ubuntu 的 WSL2 后,尽管在 CMD、PS 和 Pycharm 中同样可以工作,但我还是收到以下错误。似乎 Ubuntu 端有东西阻塞了。我该如何解决这个问题?禁用 Windows 快速启动并不能解决这个问题。
Traceback (most recent call last):
File "/home/lalexk/mpcs56600-work/Lab4/Lab4.py", line 308, in <module>
run_lab_4()
File "/home/lalexk/mpcs56600-work/Lab4/Lab4.py", line 236, in run_lab_4
block_info = connect_rpc(which_port, rpc_username, rpc_password, block_to_get)
File "/home/lalexk/mpcs56600-work/Lab4/Lab4.py", line 41, in connect_rpc
return rpc_connection.getblock(block_hash)
File "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/site-packages/bitcoinrpc/authproxy.py", line 132, in __call__
self.__conn.request('POST', self.__url.path, postdata,
File "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", line 1257, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", line 1303, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", line 1252, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", line 1012, in _send_output
self.send(msg)
File "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", line 952, in send
self.connect()
File "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", line 923, in connect
self.sock = self._create_connection(
File "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/socket.py", line 843, in create_connection
raise err
File "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/socket.py", line 831, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
答案1
我对这些脚本不太熟悉,但听起来你是说比特币服务器正在你的 Windows 主机上运行,并且你正尝试从127.0.0.1
WSL2 内部连接到它。这至少可以解释你所经历的事情。
这种情况下 WSL1 和 WSL2 的区别在于:
WSL1 以非常简单的方式共享 Windows 网络。WSL1 实例具有与其 Windows 主机相同的 IP 地址,并且WSL1 内部的
127.0.0.1
/localhost
与 Windows 相同localhost
。它就像一个桥接网络。另一方面,WSL2 在更虚拟化的环境中运行,主要使用 Windows Hyper-V 虚拟机管理程序的元素。其网络位于运行 NAT 的虚拟 NIC 上在后面Windows 主机。/
127.0.0.1
指localhost
的是 WSL2 虚拟网络适配器,不是其 Windows 主机的。
解决方案应该相当简单。使用以下任一方法:
- Windows 主机的地址(例如
192.168.1.10
) - Hyper-V 设置的虚拟路由器的地址,可以在
ip r l default
WSL 中确定。 - 或者该虚拟路由器的 mDNS 名称。这是 Windows“计算机名称”,后跟
.local
。如果您需要从 WSL2 内部确定该名称,则可以使用:echo "$(powershell.exe '[Console]::Write($env:COMPUTERNAME)').local"
如果我误解了您的设置并且它不起作用,请告诉我,我们可以澄清配置。