본문 바로가기
Docker/Docker

Docker Container 내에서 내/외부 IP 사용

by 누워있는말티즈 2023. 9. 26.

Python 3.8.10 기준

Python으로 사용하는 기기의 IP를 찍는 코드는 아래와 같다.

def getLocalIP()->str:
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("8.8.8.8", 80))
    ip = s.getsockname()[0]
    s.close()
    return ip

위 함수를 실행하면 해당 기기의 ip를 string으로 받을 수 있다. 

Docker Container 환경에서 위 함수를 이용하여 ip를 활용하는 방법을 두 가지 경우로 나누어 볼 것이다.

 

1. 컨테이너 내부 IP

그냥 컨테이너를 실행하고 위 함수가 동작하게 하면 컨테이너의 내부 ip를 찍어준다. 즉, PC의 ip가 192.168.xxx.xxx이더라도 컨테이너 내부의 ip는 172.xx.0.x의 형태로 잡힐 것이다.

컨테이너의 정보는

docker inspect {container id}

명령으로 확인할 수 있다.

 

2. 컨테이너에서 host device IP

이 글을 쓴 목적은 사실 이거다. IP로 접근해야 하는, 예를 들어 API를 서비스로 docker-compose 환경에서 함께 사용하는 경우 외부에 공개하고 싶지 않아 포트를 EXPOSE 하지 않는 경우들이 있다. 이 경우 일반적으로 다른 컨테이너에서는 해당 API에 접근이 불가하다(hostip:8000 형태일 것인데 해당 포트가 막혀있기 때문).

 

이때, docker network를 사용하겠다 생각할 수 있지만 아쉽게도 network를 사용하게 되면 1번의 경우와 마찬가지로 내부ip를 사용하게 되어 자신과 내부 ip가 다른 api는 접근이 불가하다.

이 경우 docker-compose.yml의 서비스 명세에 아래 옵션을 추가한다.

network_mode: host

해당 옵션을 선언해주면 자신의 172.xx.0.xx 의 내부 ip를 host device ip 192.168.xxx.xxx에 연결해 host의 ip를 도커 내부망에서 사용할 수 있게 된다!

해당 옵션 선언 후 맨 위의 Python 함수를 실행하면 host ip를 찍는다.

반응형

'Docker > Docker' 카테고리의 다른 글

도커 이미지 tar 파일 생성  (0) 2024.02.08
Docker Hub 사용  (0) 2024.02.07
Docker Compose 구성  (0) 2023.09.15
Dockerfile 작성  (0) 2023.09.14

댓글