在Docker上运行生锈:从服务器清空回复

ORe*_*ily 4 rust docker

我想在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(); 
}
Run Code Online (Sandbox Code Playgroud)

Cargo.toml

[package]
name = "docker"
version = "0.1.0"

[dependencies]
iron = "*"
Run Code Online (Sandbox Code Playgroud)

Dockerfile(改编自教程)

FROM jimmycuadra/rust

EXPOSE 8080
COPY Cargo.toml /source
COPY src/main.rs /source/src/
CMD cargo run
Run Code Online (Sandbox Code Playgroud)

这些是我运行的命令:

  1. docker build -t oror/rust-test
  2. docker run -it -p 8080:8080 --rm -v $(pwd):/source -w /source oror/rust-test cargo run
  3. docker ps

终端输出

  1. ifconfig 获取我机器的IP地址: 192.168.0.6
  2. curl 192.168.0.6:8080 连接到我的生锈网络应用程序

curl:(52)来自服务器的空回复

我试过了localhost:8080,我仍然得到相同的输出.我错过了什么?

tof*_*fan 15

问题是您的Web服务器正在侦听来自127.0.0.1(本地接口)但来自容器内部的请求.从容器的角度来看,你的主机在外面,所以你需要收听来自0.0.0.0的请求,然后它应该有效.

Iron::new(hello_world).http("0.0.0.0:8080").unwrap(); 
Run Code Online (Sandbox Code Playgroud)

如果您需要过滤请求的来源,我建议您使用防火墙或类似的东西从容器外部进行过滤.