Docker容器没有发送任何数据。

3
运行命令 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"]

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
非常感谢任何帮助。

你的项目是否也能够在 cargo run --release 下运行?而不仅仅是在 debug 模式下... 如果可以,那么这可能是一个 Docker 的问题。 - Stargateur
这有点不同,因为trunk的行为不同,所以在我的情况下,“trunk serve”是选项,而不是使用cargo运行我的应用程序。谢谢回复! - apinanyogaratnam
1个回答

7

server listening at http://127.0.0.1:8080 表示服务器仅接受来自 127.0.0.1,即本地主机的连接。

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

为了允许外部连接,您应该将程序绑定到 0.0.0.0,这将使其接受来自任何地方的连接。

我不是 Rust 专家,但似乎在 trunk serve 上有一个 --address 选项可用于告诉它要绑定到什么地址。我没有找到示例,只找到了这些发行说明,其中他们说出于安全原因已将默认绑定地址从 0.0.0.0 更改为 127.0.0.1,并引入了 --address 选项以便您设置其他地址。

更新:我尝试下载了你的项目,并且如果我更改 Dockerfile 中的 CMD 语句为

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

它有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接