docker desktop에서 nginx 사용하기

Ssabae·2023년 8월 4일
0

docker

목록 보기
1/1
post-thumbnail

docker desktop

현재 Docker Desktop에서는 --network host 모드로 동작하지 않습니다.
이것이 의미하는바는 host(local)와 docker container와 네트워크를 공유하지 않기 때문에 로컬의 다른 서비스에게 포워딩을 해줄 수가 없습니다.

version: '3.8'

services:
  nginx:
    image: nginx:stable
    container_name: nginx
    restart: always
    network_mode: "host" # host mode 
    environment:
      TZ: Asia/Seoul
    volumes:
      - ./conf/nginx.conf:/etc/nginx/nginx.conf
      - ./conf/ssl:/etc/nginx/ssl
      - ./conf/conf.d:/etc/nginx/conf.d
      - ./conf/vhosts:/etc/nginx/vhosts
      - ./logs:/var/log/nginx
      - ./html:/etc/nginx/html

실제로 위와같이 host 모드로 네트워크를 구성하게된다면 container 내부에 아무 요청이 오지 않습니다..
80 or 443 --X--> nginx(docker)

Linux는 예외입니다. linux는 host모드가 정상적으로 동작이되며 macOS, Windows에서만 동작하지 않습니다.
( https://github.com/docker/roadmap/issues/238 )

꼼수 발동

version: '3.8'

services:
  nginx:
    image: nginx:stable
    container_name: nginx
    restart: always
    # network_mode: "host" # 해당부분 주석처리 
    environment:
      TZ: Asia/Seoul
    volumes:
      - ./conf/nginx.conf:/etc/nginx/nginx.conf
      - ./conf/ssl:/etc/nginx/ssl
      - ./conf/conf.d:/etc/nginx/conf.d
      - ./conf/vhosts:/etc/nginx/vhosts
      - ./logs:/var/log/nginx
      - ./html:/etc/nginx/html
    ports: # port를 연동 
      - 80:80
      - 443:443

이렇게 80:80, 443:443 연결을 해놓고 nginx에 access log 를 보면서 실제 요청이 들어오고 있는지 확인을 해줍니다.

하지만 이렇게 해도 host와의 통신을 할 수 없습니다.
80 or 443 --> nginx(docker) --X--> host service(:8080)

location / {
    # 127.0.0.1 -> host.docker.internal로 변경 
    proxy_pass http://host.docker.internal:8080; 
}

container 내부에서 host와의 통신을 host.docker.internal로 하고 있는데 이것을 이용하여
127.0.0.1 대신 해당 도메인으로 변경해놓습니다.
이렇게 설정하면 로컬에서 nginx를 이용한 통신이 가능해집니다.

다만 설정하는게 매우매우 귀찮기 때문에 어서 빨리 network에 host 모드가 동작하길 기원해봅니다...

다들 설정하다가 빡쳐서 이 블로그를 보게되셨다면 아래 docker roadmap에 한표를 행사해주세요 ㅎㅎ
( https://github.com/docker/roadmap/issues/238 )

profile
Front-End 부터 Back-End 까지 잘 하고 싶은 개발자

2개의 댓글

comment-user-thumbnail
2023년 8월 4일

글 재미있게 봤습니다.

1개의 답글