티스토리 뷰

gRPC 서버 Docker 이미지 빌드

FROM rust:latest as builder

WORKDIR /app

COPY . .

RUN apt update && apt install -y protobuf-compiler

RUN cargo build --release --bin server

FROM debian:stable-slim

RUN apt update \
    && apt install -y libssl-dev ca-certificates \
    && apt clean \
    && rm -rf /var/lib/apt/lists/*

COPY --from=builder /app/target/release/server /app/server

CMD ["/app/server"]
  • multistage build를 통해 1GB가 넘는 rust base 이미지 -> 100MB가량으로 용량 절감

docker compose로 실행중인 gRPC 서버와 연결이 안 되는 문제

발견한 오류

thread 'main' panicked at src/bin/client.rs:19:48:
called `Result::unwrap()` on an `Err` value: Status { code: Unknown, message: "transport error", source: Some(tonic::transport::Error(Transport, hyper::Error(Io, Custom { kind: BrokenPipe, error: "stream closed because of a broken pipe" }))) }

원인

use greeting::{greet::greet_service_server::GreetServiceServer, server::GreetingServer};
use tonic::transport::Server;

extern crate greeting;

#[tokio::main]
async fn main() {
    let addr = "127.0.0.1:50051".to_string();

    println!("Server listening on {}", addr);

    let greeting_server = GreetServiceServer::new(GreetingServer::default());

    Server::builder()
        .add_service(greeting_server)
        .serve(addr.parse().unwrap())
        .await
        .unwrap()
}
  •  Docker 컨테이너 안에서는 어떤 ip 주소와 바인딩을 해서 서버를 실행해도 상관이 없지만(아마도), 외부로 포트를 포워딩하여 외부의 요청을 받아서 처리하려면 0.0.0.0 주소를 반드시 사용해야 함
  • 따라서 위의 오류는 0.0.0.0 주소가 아닌 127.0.0.1 주소를 사용함으로 인해 컨테이너에서 외부의 요청을 서버로 전달할 수 없어서 발생한 것
  • go로 컨테이너에서 서버를 실행할 때는 포트 번호만 넘겨주고 실행해도 아무 문제가 없었기 때문에 놓치고 넘어갔던 부분이라고 생각

해결

let addr = "0.0.0.0:50051".to_string();

 주소 변경하고 이미지 새로 빌드 및 컨테이너 실행

로컬에서 컨테이너에서 실행중인 서버로 요청 및 응답이 정상 전달 및 처리됨


참고

 

Rust Tonic gRPC "transport error" / " Kind(BrokenPipe)" only when running in Docker

this one is weirdo and bugging me quite a bit. I'm learning gRPC with tonic & prost. I've followed a tutorial and basically wrote a simple voting server & client. Locally, it runs perfectly...

stackoverflow.com

 

최근에 올라온 글
최근에 달린 댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday
글 보관함