Я создал образ докера, содержащий приложение ржавчины, которое отвечает на запросы на порт 8000. Само приложение является базовым примером использования библиотеки ракеты (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