Rust actix-web 在 docker 中不起作用"refused to connect"错误



在本地运行它可以按预期工作,但是,当在docker中运行它时,我无法访问该站点。我所看到的一切都说要确保绑定到0.0.0.0,我已经绑定到了,所以我不知所措。

Dockerfile

FROM rust:latest as builder
RUN apt-get update && apt-get -y install ca-certificates cmake musl-tools libssl-dev && rm -rf /var/lib/apt/lists/*
COPY . .
RUN rustup target add x86_64-unknown-linux-musl
ENV PKG_CONFIG_ALLOW_CROSS=1
RUN cargo build --target x86_64-unknown-linux-musl --release

FROM scratch
COPY --from=builder /target/x86_64-unknown-linux-musl/release/rusty-bits .
CMD ["/rusty-bits"]

Cargo.toml

[package]
name = "rusty-bits"
version = "0.1.0"
edition = "2018"

[dependencies]
actix-web = "3"
actix-rt = "2.0.0-beta.1"

main.rs

use actix_web::{web, App, HttpRequest, HttpServer, Responder};
async fn greet(req: HttpRequest) -> impl Responder {
let name = req.match_info().get("name").unwrap_or("World");
format!("Hello {}!", &name)
}
async fn health(_req: HttpRequest) -> impl Responder {
"OK"
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.route("/", web::get().to(greet))
.route("/{name}", web::get().to(greet))
.route("/health", web::get().to(health))
})
.bind(("0.0.0.0", 8000))?
.run()
.await
}

我认为这里有两个问题:

  • 看起来您忘记将EXPOSE 8000添加到您的dockerfile中了
  • 由于您忘记添加exposure,我想您在运行映像时也忘记绑定端口:docker run -p 8000:8000 image_name

相关内容

最新更新