docker 容器没有发送任何数据

docker container didn't send any data

运行 docker build -t <IMAGE_NAME> . 然后 运行 docker run -p 8080:8080 <IMAGE_NAME> 记录到控制台它工作但 127.0.0.1:8080 不显示客户端

Docker 文件:

FROM rust:1.60.0-slim-buster

WORKDIR /app

COPY . .

RUN rustup target add wasm32-unknown-unknown
RUN cargo install --locked --version 0.15.0 trunk
RUN trunk build --release

EXPOSE 8080

CMD ["trunk", "serve", "--release"]

Cargo.toml

[package]
name = "yew-whos-that-pokemon-client"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
getrandom = { version = "0.2.4", features = ["js"] }
rand = "0.8.5"
reqwest = "0.11.10"
serde_json = "1.0.81"
wasm-bindgen-futures = "0.4.30"
web-sys = "0.3.57"
yew = "0.19.3"

这在本地工作得很好,我尝试了多个浏览器

如果需要解决此问题,请参考源代码:https://github.com/apinanyogaratnam/yew-whos-that-pokemon-client

任何帮助将不胜感激,谢谢

server listening at http://127.0.0.1:8080 表示服务器将只接受来自 127.0.0.1 的连接,即 localhost。

在容器中,localhost 就是容器本身,因此您的程序不会接受来自容器外部的连接。

要做到这一点,您应该将您的程序绑定到 0.0.0.0,这将使其接受来自任何地方的连接。

我不是 Rust 专家,但 trunk serve 上似乎有一个 --address 选项,您可以使用它来告诉它绑定到哪个地址。我没能找到例子。只有这些 release notes 他们说他们出于安全原因将默认绑定地址从 0.0.0.0 更改为 127.0.0.1 并引入了 --address 选项以防您需要设置另一个地址.

更新:我尝试下载您的项目,如果我将 Dockerfile 中的 CMD 语句更改为

CMD ["trunk", "serve", "--release", "--address", "0.0.0.0"]

有效。