在 WSL 2 上通过 Docker 连接到 TCP 服务器时遇到问题
Trouble connecting to a TCP server through Docker on WSL 2
我在 Windows 10 上使用 WSL2,使用 Ubuntu 图像,Docker 桌面 Windows (2.2.2.0) 与 WSL 集成。
我有一个超级基本的 rust tcp 服务器。我认为唯一相关的是:
let listener = TcpListener::bind("127.0.0.1:8080").unwrap();
println!("Listening on 8080");
for stream in listener.incoming() {
println!("Received connection");
let stream = stream.unwrap();
handle_connection(stream);
}
我可以 cargo install
和 运行 二进制文件没有问题;打印上面的行,我可以从 WSL 卷曲 localhost:8080
并按照我对其余代码的预期查看响应。
我想把它变成 docker 图片。这是 Docker 文件。
FROM rust:1.40 as builder
COPY . .
RUN cargo install --path . --root .
FROM debian:buster-slim
COPY --from=builder ./bin/coolserver ./coolserver
EXPOSE 8080
ENTRYPOINT ["./coolserver"]
然后我做:
docker build -t coolserver .
docker run -it --rm -p 8080:8080 coolserver
我按预期看到 Listening on 8080
(即没有恐慌),但尝试 curl localhost:8080
会产生 curl: (52) Empty reply from server
。这,我不知道该怎么办。日志记录表明我的程序到达了 listener.incoming()
的位置,但没有进入块。
为了查看它是否与我的设置(Docker 用于桌面、WSL 等)或我的 Docker 文件有关,我遵循了 docker-http-https-echo 的自述文件图片,成功。我可以将它卷曲到指定的端口。
我不知道如何进一步调试。提前致谢。
EXPOSE
关键字是为容器间通信打开端口,以便从主机使用这些端口,您必须使用 -p 8080:8080
而 运行 docker 通过 docker run
@CarlosRafaelRamirez 帮我解决了。它就像绑定到 0.0.0.0
而不是环回地址 127.0.0.1
一样简单。更多信息在这里:https://pythonspeed.com/articles/docker-connection-refused/
我在 Windows 10 上使用 WSL2,使用 Ubuntu 图像,Docker 桌面 Windows (2.2.2.0) 与 WSL 集成。
我有一个超级基本的 rust tcp 服务器。我认为唯一相关的是:
let listener = TcpListener::bind("127.0.0.1:8080").unwrap();
println!("Listening on 8080");
for stream in listener.incoming() {
println!("Received connection");
let stream = stream.unwrap();
handle_connection(stream);
}
我可以 cargo install
和 运行 二进制文件没有问题;打印上面的行,我可以从 WSL 卷曲 localhost:8080
并按照我对其余代码的预期查看响应。
我想把它变成 docker 图片。这是 Docker 文件。
FROM rust:1.40 as builder
COPY . .
RUN cargo install --path . --root .
FROM debian:buster-slim
COPY --from=builder ./bin/coolserver ./coolserver
EXPOSE 8080
ENTRYPOINT ["./coolserver"]
然后我做:
docker build -t coolserver .
docker run -it --rm -p 8080:8080 coolserver
我按预期看到 Listening on 8080
(即没有恐慌),但尝试 curl localhost:8080
会产生 curl: (52) Empty reply from server
。这,我不知道该怎么办。日志记录表明我的程序到达了 listener.incoming()
的位置,但没有进入块。
为了查看它是否与我的设置(Docker 用于桌面、WSL 等)或我的 Docker 文件有关,我遵循了 docker-http-https-echo 的自述文件图片,成功。我可以将它卷曲到指定的端口。
我不知道如何进一步调试。提前致谢。
EXPOSE
关键字是为容器间通信打开端口,以便从主机使用这些端口,您必须使用 -p 8080:8080
而 运行 docker 通过 docker run
@CarlosRafaelRamirez 帮我解决了。它就像绑定到 0.0.0.0
而不是环回地址 127.0.0.1
一样简单。更多信息在这里:https://pythonspeed.com/articles/docker-connection-refused/