Docker-compose invalid port specification error
docker-compose를 사용해서 ubuntu를 실행시켰는데 잘실행되고 있었다.
그런데 어느날 갑자기 다음과 같은 에러가 발생했다.
ERROR: for ubuntu Cannot create container for service ubuntu : invalid port specification: "678682"
ERROR: Encountered errors while bringing up the project.
docker-compose.yml을 살펴보면
version: "3"
services:
ubuntu:
container_name: ubuntu
image: ubuntu:20.04
tty: true
ports:
- 11311:22
이렇게 되어있는데 에러가 발생했다.
일단 에러 메세지를 살펴보면 “678682”라는 숫자의 포트가 어떻게 나왔나 살펴보니 YAML 1.1 버전부터는 시간계산에 유용한 “base60”을 사용하여 계산한다고 한다.
60 미만의 숫자는 hh : mm : ss 총 시간 (초)으로 자동 변환되어 버린다.
# 678682가 나오게 된 배경
# 역변환
(678682 - 22(60^0)) / (60^1) = 11311
# 원래 계산식
11311 * (60^1) + 22 *(60^0) = 678682
즉, 11311 포트를 개방할 수 없어서 발생한다는 에러라고 볼 수 있다.
docker/compose github에 같은 오류의 issue를 확인할 수 있었다.
여기에서 우리는 base60으로 할게 아니라 포트 그대로 보여주어야 하기 때문에 더블쿼트로 감싸줘야한다.
version: "3"
services:
ubuntu:
container_name: ubuntu
image: ubuntu:20.04
tty: true
ports:
- "11311:22"
이렇게 실행하니 원활히 실행됐다.
docker-compose 공식 문서에서 보니 ports를 더블쿼트로 감싸고 있었다.
공식문서를 잘 확인해야겠다.