Я использую WSL2 на Windows 10, используя образ Ubuntu, и Docker для рабочего стола Windows (2.2.2.0) с интеграцией WSL.
У меня есть супер основы c ржавчина 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
и запустить двоичный файл без проблем; напечатанная строка выше, я могу свернуть 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
, как и ожидалось (то есть без pani c), но попытка curl localhost:8080
приводит к curl: (52) Empty reply from server
. Это, я не знаю, что делать. Ведение журнала предполагает, что моя программа достигает точки, где она достигает listener.incoming()
, но не входит в блок.
Чтобы узнать, было ли это как-то связано с моей настройкой (Docker для Desktop, WSL, et c.) Или мой файл Docker, я успешно выполнил README для изображения docker -http-https-echo . Я могу свернуть его на указанных портах.
Я не знаю, как отлаживать дальше. Заранее спасибо.