gpt4 book ai didi

docker - 为什么我发布的端口不起作用?

转载 作者:行者123 更新时间:2023-11-29 08:32:08 24 4
gpt4 key购买 nike

我创建了一个包含 rust 应用程序的 docker 镜像,该应用程序响应端口 8000 上的 get 请求。该应用程序本身是一个使用火箭库 (https://rocket.rs/) 的基本示例,它看起来像这样

#![feature(proc_macro_hygiene, decl_macro)]

#[macro_use] extern crate rocket;

#[get("/")]
fn index() -> &'static str {
"Hello, world!"
}

fn main() {
rocket::ignite().mount("/", routes![index]).launch();
}

我编译了这个并命名为server

然后我创建了一个 Docker 文件来托管它

FROM ubuntu:16.04

RUN apt-get update; apt-get install -y curl

COPY server /root/

EXPOSE 8000

CMD ["/root/server"]

我用$ docker build -t port_test 并使用 $ docker run -p 8000:8000 port_test

运行它

此时一切看起来都很好

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3befe0c272f7 port_test "/root/server" 7 minutes ago Up 7 minutes 0.0.0.0:8000->8000/tcp festive_wilson

如果我在容器内运行 curl 它工作正常

$ docker exec -it 3befe0c272f7 curl -s localhost:8000
Hello, world!

但是我不能从主机上做同样的事情

$ curl localhost:8000
curl: (56) Recv failure: Connection reset by peer

最佳答案

David Maze 是正确的。问题是该进程绑定(bind)到容器中的本地主机。我添加了一个包含以下条目的 Rocket.toml 文件

[global]
address = "0.0.0.0"

[development]
address = "0.0.0.0"

现在它工作正常。

谢谢大卫。

关于docker - 为什么我发布的端口不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54119006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com