Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Tags
more
Archives
Today
Total
관리 메뉴

DS's TechBlog

[Docker] Docker Compose에서 OpenVidu와 Spring Boot 연동 시 네트워크 문제 해결 본문

Tools

[Docker] Docker Compose에서 OpenVidu와 Spring Boot 연동 시 네트워크 문제 해결

dsjo 2025. 1. 29. 03:12

 Windows 환경에서 Docker Compose를 사용하여 Spring Boot 애플리케이션과 OpenVidu 서버를 연동하는 과정에서 네트워크 설정 문제로 인해 연결이 되지 않는 문제가 발생했습니다. 문제를 해결하기 위한 과정을 공유하고자 글을 작성하였습니다.

 

문제 상황

 Spring Boot 애플리케이션을 Docker Compose로 실행하면서 OpenVidu 서버와 연동하려고 시도했습니다. 아래는 `docker-compose.yml` 파일의 설정입니다.

services:
  spring-app:
    build:
      context: .  # Dockerfile이 위치한 폴더
      dockerfile: Dockerfile.local  # Spring Boot Dockerfile 이름
    ports:
      - "8000:8000"  # Spring Boot 애플리케이션 포트 매핑
    environment:
      SPRING_PROFILES_ACTIVE: local  # Spring Boot 활성 프로파일 설정
      TZ: Asia/Seoul
      OPENVIDU_SECRET: MY_SECRET
      OPENVIDU_URL: http://localhost:4443/

 

 또한, OpenVidu 서버를 다음과 같이 Docker로 실행했습니다.

docker run -p 4443:4443 --rm -e OPENVIDU_SECRET=MY_SECRET openvidu/openvidu-dev:2.31.0

 

그러나, Spring Boot 애플리케이션이 OpenVidu 서버에 정상적으로 연결되지 않았습니다.

 

원인 분석

 Docker에서 localhost는 각 컨테이너 내부를 의미합니다. 따라서, Spring Boot 컨테이너 내에서 http://localhost:4443/으로 접근하려고 하면, 이는 Spring Boot 컨테이너 자체의 포트 4443을 가리키게 됩니다. 그러나 OpenVidu 서버는 별도의 컨테이너에서 실행되고 있기 때문에 연결이 되지 않았습니다.

 Docker의 네트워크 구조상, 같은 도커 네트워크에 속하지 않은 컨테이너 간에는 localhost로 직접 통신이 불가능합니다.

 

해결 방법

  1. network_mode: host 설정 사용
    network_mode: host를 사용하면 컨테이너가 호스트의 네트워크를 직접 사용하게 되어 localhost를 통해 호스트의 포트에 접근할 수 있습니다. 그러므로, http://localhost:4443 으로 OpenVidu 컨테이너에 접속할 수 있게 됩니다.

  2. 동일한 도커 네트워크에 OpenVidu 추가
    Spring Boot와 OpenVidu를 동일한 네트워크에 포함시키는 방법입니다.
version: '3.8'
services:
  spring-app:
    build:
      context: .  # Dockerfile이 위치한 폴더
      dockerfile: Dockerfile.local  # Spring Boot Dockerfile 이름
    ports:
      - "8000:8000"  # Spring Boot 애플리케이션 포트 매핑
    environment:
      SPRING_PROFILES_ACTIVE: local  # Spring Boot 활성 프로파일 설정
      TZ: Asia/Seoul
      OPENVIDU_SECRET: MY_SECRET
      OPENVIDU_URL: http://openvidu-server:4443/
    depends_on:
      - openvidu-server

  openvidu-server:
    image: openvidu/openvidu-dev:2.31.0
    ports:
      - "4443:4443"
    environment:
      OPENVIDU_SECRET: MY_SECRET
      TZ: Asia/Seoul

 OPENVIDU_URL을 http://openvidu-server:4443/으로 변경하여 동일한 네트워크 내의 OpenVidu 서버를 가리키도록 했습니다.

 

접속 확인

 저는 2번째 방법을 선택했습니다. 서로 다른 브리지 네트워크와의 격리가 보장되므로 보안 측면에서도 유리하다고 생각했습니다. 설정을 완료한 후, Docker Compose를 통해 모든 서비스를 실행했습니다. Spring Boot와 OpenVidu가 정상적으로 연결되는 것을 확인할 수 있었습니다.

 

마무리

 이번 글에서는 Docker Compose를 사용하여 Spring Boot 애플리케이션과 OpenVidu 서버를 연동할 때 발생할 수 있는 네트워크 문제를 해결하는 방법에 대해 살펴보았습니다. network_mode: host를 사용하는 방법과 동일한 도커 네트워크에 컨테이너를 포함시키는 두 가지 방법을 소개하였습니다. Docker의 네트워크 설정은 컨테이너 간의 통신을 원활하게 하기 위해 중요한 요소이므로, 상황에 맞는 적절한 설정을 선택하는 것이 중요합니다. 도움이 되셨길 바랍니다. 감사합니다.

 

참조

https://docs.docker.com/engine/network/

 

Networking

Learn how networking works from the container's point of view

docs.docker.com