설명
TCP와 UDP 포트 번호의 범위는 0부터 65535까지이며, 0은 예약되어 있습니다. 고정된 서비스 포트에는 1부터 65535 사이의 적절한 값을 사용해야 합니다. 범위를 벗어난 EXPOSE 값은 빌드 오류를 일으킬 수 있습니다.
EXPOSE는 포트 정보를 선언할 뿐입니다. 애플리케이션을 해당 포트에서 수신하게 하거나 호스트에 포트를 공개하는 명령은 아닙니다.
잠재적 영향
- 잘못된 포트 선언으로 빌드가 실패하거나 도구가 서비스 포트를 잘못 해석할 수 있습니다.
- 선언과 실제 수신 포트가 다르면 배포 시 잘못된 포트 연결로 서비스에 접근하지 못할 수 있습니다.
해결 방법
- EXPOSE에 실제 서비스와 일치하는 1부터 65535 사이의 포트와 필요한 TCP 또는 UDP 프로토콜을 지정하세요.
- 애플리케이션의 수신 설정, 실행 시 포트 공개와 방화벽 정책을 별도로 확인하세요. 유효한 번호만으로 접근 통제가 보장되지는 않습니다.
예시
기존 NGINX 예제는 포트 선언만 비교합니다. 실제 배포에는 지원 중인 이미지를 사용하세요. 변경 후 80은 예제 이미지의 기본 HTTP 수신 포트에 맞춘 값입니다.
변경 전
dockerfile
FROM nginx:1.27-alpine
EXPOSE 65536
CMD ["nginx", "-g", "daemon off;"]
변경 후
dockerfile
FROM nginx:1.27-alpine
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
설명:
- 변경 전: 65536은 유효한 포트 번호 범위를 벗어납니다.
- 변경 후: 80을 선언해 NGINX의 기본 HTTP 수신 포트와 맞춥니다. 호스트 포트 공개는 별도로 구성해야 합니다.