gpt4 book ai didi

docker - 在 WSL 2 上通过 Docker 连接到 TCP 服务器时出现问题

转载 作者:行者123 更新时间:2023-12-02 18:26:44 25 4
gpt4 key购买 nike

我正在使用 Ubuntu 镜像在 Windows 10 上使用 WSL2,并使用 WSL 集成的 Docker for Desktop Windows (2.2.2.0)。

我有一个 super 基本的 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并毫无问题地运行二进制文件;上面的行打印,我可以 curl localhost:8080来自 WSL 并查看我对其余代码的期望的响应。

我想把它变成一个 docker 图像。这是 Dockerfile。
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正如预期的那样(即没有 panic ),但试图 curl localhost:8080产量 curl: (52) Empty reply from server .这个,我不知道该怎么说。日志记录表明我的程序达到了 listener.incoming() ,但不进入区 block 。

要查看它是否与我的设置(桌面版 Docker、WSL 等)或我的 Dockerfile 有关,我按照 docker-http-https-echo 的 README 进行操作。图片,成功。我可以在指定的端口上 curl 它。

我不知道如何进一步调试。提前致谢。

最佳答案

EXPOSE关键字是为容器间通信打开端口,以便使用来自主机的这些端口,您必须使用 -p 8080:8080通过 docker run 运行 docker 时

关于docker - 在 WSL 2 上通过 Docker 连接到 TCP 服务器时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60690463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com