1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rust+DockerでWebサーバーにアクセスできない

Posted at

はじめに

以下の書籍をやっていたところ躓いたエラーになります

ここでは書籍通りではなく、Rustのコンテナ環境上でWebサーバーを立てていたので、それが起因して問題が起きていました

問題

以下のコードを実行しました

main.rs
use axum::{routing::get, Router};
use std::net::SocketAddr;

#[tokio::main]
async fn main() {
    let app = Router::new().route("/", get(root));
    let addr = SocketAddr::from(([127, 0, 0, 1], 3000));

    axum::Server::bind(&addr)
        .serve(app.into_make_service())
        .await
        .unwrap();
}

async fn root() -> &'static str {
    "Hello, World!"
}

そしてdocker-compose.ymlを以下に設定します

docker-compose.yml
version: '3'
services:
  rust:
    build: .
    container_name: rust
    tty: true
    ports:
      - "3000:3000"
    volumes:
      - .:/app

そして

$ curl http://localhost:3000

にアクセスしたところアクセスができませんでした

解決方法

サーバーの起動するIPが間違っていました

$ docker ps


CONTAINER ID   IMAGE                                  COMMAND                  CREATED         STATUS         PORTS                                       NAMES
94bf63a7cdc8   learn-rust-with-web-application_rust   "/bin/sh"                5 minutes ago   Up 5 minutes   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   rust
b0f3a5289ff5   4251bd246069                           "/bin/sh -c 'rustup …"   27 hours ago    Up 27 hours  

コンテナの情報をみたところ

0.0.0.0:3000->3000/tcp

とありました

コードを見ると

let addr = SocketAddr::from(([127, 0, 0, 1], 3000));

とあり、127.0.0.1となっていました
そこで以下のように変更しました

let addr = SocketAddr::from(([127, 0, 0, 1], 3000));

let addr = SocketAddr::from(([0, 0, 0, 0], 3000));

これで問題なくアクセスできるようになりました

最終的なコードは以下になりました

main.rs
use axum::{routing::get, Router};
use std::net::SocketAddr;

#[tokio::main]
async fn main() {
    let app = Router::new().route("/", get(root));
    let addr = SocketAddr::from(([0, 0, 0, 0], 3000));

    axum::Server::bind(&addr)
        .serve(app.into_make_service())
        .await
        .unwrap();
}

async fn root() -> &'static str {
    "Hello, World!"
}

おわりに

いままでの言語ではIPの部分を気にしなくても動いていたので、一瞬ハマってしまいました

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?