[英]Trouble connecting to a TCP server through Docker on WSL 2
我在使用 Ubuntu 映像的 Windows 10 上使用 WSL2,以及使用 WSL 集成的桌面 Windows (2.2.2.0) Docker。
我有一個超級基本的 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 鏡像。 這是 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
按預期Listening on 8080
(即沒有恐慌),但嘗試curl localhost:8080
產生curl: (52) Empty reply from server
。 這,我不知道該怎么辦。 日志記錄表明我的程序到達了listener.incoming()
,但沒有進入塊。
要查看它是否與我的設置(桌面 Docker、WSL 等)或我的 Dockerfile 相關,我成功地遵循了 docker -http-https-echo映像的自述文件。 我可以將它卷曲在指定的端口上。
我不知道如何進一步調試。 提前致謝。
EXPOSE
關鍵字是打開用於容器間通信的端口以使用來自主機的這些端口您必須在通過docker run
運行 docker 時使用-p 8080:8080
@CarlosRafaelRamirez 為我解決了這個問題。 它就像綁定到0.0.0.0
而不是環回地址127.0.0.1
一樣簡單。 更多信息在這里: https : //pythonspeed.com/articles/docker-connection-refused/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.