【发布时间】:2017-05-21 14:47:20
【问题描述】:
我想在 docker 容器中运行一个 rust web 应用程序。我对这两种技术都很陌生,所以我一开始很简单。
这里是main.rs:
extern crate iron;
use iron::prelude::*;
use iron::status;
fn main() {
fn hello_world(_: &mut Request) -> IronResult<Response> {
Ok(Response::with((status::Ok, "Hello World!")))
}
Iron::new(hello_world).http("127.0.0.1:8080").unwrap();
}
Cargo.toml
[package]
name = "docker"
version = "0.1.0"
[dependencies]
iron = "*"
Dockerfile(改编自this教程)
FROM jimmycuadra/rust
EXPOSE 8080
COPY Cargo.toml /source
COPY src/main.rs /source/src/
CMD cargo run
这些是我运行的命令:
docker build -t oror/rust-testdocker run -it -p 8080:8080 --rm -v $(pwd):/source -w /source oror/rust-test cargo rundocker ps
-
ifconfig获取我机器的IP地址:192.168.0.6 -
curl 192.168.0.6:8080连接到我的 rust 网络应用程序
curl: (52) 来自服务器的空回复
我已经尝试过localhost:8080,但仍然得到相同的输出。
我错过了什么?
【问题讨论】:
-
你在哪里部署了 docker 容器?您还应该检查您是否真的想要
-p 8080:80。 -
我将它部署在我的本地机器上。我尝试在没有
-p 8080:80的情况下运行 docker 容器; docker 镜像在 32768 端口上运行。我尝试连接到192.168.0.6:32768,但得到了相同的响应 -
该端口与您的服务器无关,您仍然需要通过端口 8080 访问它。
-
好的,我想我不需要
-p 8080:80这行,因为我的 rust 服务器侦听端口 8080,并且该端口在 docker 文件中公开,但我仍然面临同样的问题 -
改用
-p 8080。