docker容器没有发送任何数据

api*_*nam 3 containers rust docker yew trunk-rs

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

https://user-images.githubusercontent.com/72412733/169354228-2ab6bc5b-4cdd-4026-afe4-5c41f8c50717.png

https://user-images.githubusercontent.com/72412733/169354294-f0140f59-dbe7-4327-bceb-afcf75681f9a.png

Dockerfile:

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"]
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

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

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

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

Han*_*ian 7

server listening at http://127.0.0.1:8080意味着服务器只接受来自 127.0.0.1(即 localhost)的连接。

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

为了让它做到这一点,你应该让你的程序绑定到它0.0.0.0,这将使它接受来自任何地方的连接。

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

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

CMD ["trunk", "serve", "--release", "--address", "0.0.0.0"]
Run Code Online (Sandbox Code Playgroud)

有用。