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

标签 docker rust windows-subsystem-for-linux

我正在使用 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/

相关文章:

docker - 如何通过简单地从头开始在容器中设置随机 UID 来创建非 root 用户?

docker - 在gitlab CI管道中修改docker镜像

rust - 有没有办法将递归与索引箱的品牌索引一起使用来创建树?

rust - 我可以创建私有(private)枚举构造函数吗?

wordpress - 在 docker 容器中更新 wordpress 插件

django - 无法从Django Docker实例内部访问项目绝对URL

rust - 如何在Rust中实现后增量宏

python - WSL 上的 Virtualenv 创建的文件与 PowerShell 上的 Virtualenv 不同

docker - 如何修复 "Failed to connect to localhost port 9515: Connection refused"Laravel Dusk

c - addr2line - 在基本示例上失败