Open4

Rust(rocket)をDockerで構築したときに、外部から指定したポートにアクセス出来ないのは何故か

KenAraKenAra

少し脱線しますが、docker-composeコマンドの実装は
docker-compose up -dでなくとも
docker compose up -dという感じでハイフンなしで実行できるのですね。

KenAraKenAra

下記のファイルでdocker composeを実行するが、やはりコンテナ内からしかアクセスできず・・・😔

docker-compose.yml
version: '3.8'

services:
  backend:
    container_name: backend
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./:/backend
      - rust_docker_todo_target:/backend/target
    ports:
      - 9090:8000
    command: cargo run
    tty: true
    environment:
      USER: kenara
      TZ: Asia/Tokyo
      CARGO_BUILD_TARGET_DIR: /backend/target

volumes:
  rust_docker_todo_target:
    external: true
Dockerfile
FROM rustlang/rust:nightly

WORKDIR /backend

COPY . .

RUN cargo install --path .

EXPOSE 9090
main.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();
}
Cargo.toml
[package]
name = "rust_docker_todo"
version = "0.1.0"
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rocket = "0.4.10"

[global]
address = "0.0.0.0"

[development]
address = "0.0.0.0"
木瓜丸木瓜丸

私も同じ状況になりました。Rocket.tomlを作成してホスト名を0.0.0.0に指定した所解決したので、おそらくフォワード先でホスト名が127.0.0.1ではなくなるのではないかなと思っています(未検証)

[default]
address = "0.0.0.0"

[debug]
port = 8000
log = "debug"