2017-05-21 21 views
2

我想在Docker容器中运行防火墙Web应用程序。我对这两种技术都很陌生,所以我开始简单。在Docker上运行生锈:从服务器回复空白

这里是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 

这些是我跑的命令:

  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

Terminal Ouput

  • ifconfig让我的机器的IP地址:192.168.0.6
  • curl 192.168.0.6:8080连接到我的铁锈网页应用程序
  • 卷曲:(52)空从服务器

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

    +0

    您在哪里部署了码头集装箱?你还应该检查你是否真的想要'-p 8080:80'。 –

    +0

    我将它部署在本地机器上。我试图在没有-p 8080:80'的情况下运行docker容器;码头图像在端口32768上运行。我试图连接到'192.168.0.6:32768',但得到了相同的响应 – OReallyOReily

    +0

    该端口不需要处理您的服务器,您仍然需要通过端口8080访问它。 –

    回答

    4

    问题是您的web服务器正在监听来自127.0.0.1(本地接口)的请求,但是来自您的容器内部。从容器的角度来看,你的主机在外面,所以你需要听取来自0.0.0.0的请求,那么它应该可以工作。

    Iron::new(hello_world).http("0.0.0.0:8080").unwrap(); 
    

    如果您需要过滤您的要求来的,我建议你从与防火墙或类似的东西在容器外部做到这一点。

    +0

    非常感谢!这解决了我的问题 – OReallyOReily

    相关问题