컨테이너 포트 구성 관리
이제 컨테이너화된 서비스를 검사하고 접근하는 방법을 이해했으므로 몇 가지 추가적인 포트 관리 개념을 살펴보겠습니다.
일반적인 포트 관리 시나리오
다음은 발생할 수 있는 몇 가지 일반적인 시나리오입니다.
1. 포트 매핑 변경
호스트에서 포트 8080 이 이미 사용 중인 경우 다른 포트에 매핑할 수 있습니다.
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -p 8081:80 nginx
이제 Nginx 컨테이너는 포트 8081 에서 접근할 수 있습니다.
curl localhost:8081
2. 특정 인터페이스에 바인딩
모든 인터페이스 (0.0.0.0) 에 바인딩하는 대신 특정 IP 에 바인딩할 수 있습니다.
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -p 127.0.0.1:8080:80 nginx
이렇게 하면 컨테이너 포트가 localhost 인터페이스에만 바인딩되어 호스트 외부에서는 접근할 수 없게 됩니다.
3. 임의의 호스트 포트 사용
어떤 호스트 포트가 사용되는지 상관하지 않는 경우 Docker 가 하나를 할당하도록 합니다.
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -P nginx
-P 플래그는 노출된 모든 포트를 호스트의 임의 포트에 게시합니다.
할당된 포트를 확인합니다.
docker port web-demo
출력:
80/tcp -> 0.0.0.0:49153
정확한 포트 번호는 다를 수 있지만 이 예에서는 포트 80 이 포트 49153 에 매핑되었습니다.
일반적인 포트 문제 해결
다음은 일반적인 포트 관련 문제에 대한 해결책입니다.
- 포트가 이미 사용 중: "포트가 이미 할당되었습니다"와 같은 오류가 표시되면 다른 포트를 선택하십시오.
docker run -d --name another-web -p 8082:80 nginx
- 컨테이너가 호스트에 연결할 수 없음: 컨테이너가 호스트의 서비스에 연결해야 하는 경우
localhost 대신 특수 Docker DNS 이름 host.docker.internal을 사용하십시오.
docker run --rm alpine ping -c 2 host.docker.internal
- 어떤 프로세스가 포트를 사용하는지 확인: 호스트에서 포트가 이미 사용 중인 경우 프로세스를 찾습니다.
sudo lsof -i :8080
정리
컨테이너를 정리해 보겠습니다.
docker stop web-demo redis-demo
docker rm web-demo redis-demo