ポート 8000 で要求を取得するために応答する錆びたアプリケーションを含む Docker イメージを作成しました。アプリケーション自体は、ロケット ライブラリ ( 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イメージをビルドし
$ 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