docker-compose ports 적용이 안되는 경우

Docker 2016.07.27 16:53 Posted by 김한별 behonestar

증상

Dockerfile에는 EXPOSE를 명시하지 않고 대신 docker-compose.yml에 ports를 설정하였습니다.

그런데 docker-compose run을 하였는데 해당 port가 맵핑되지 않습니다.


docker-compose.yml

version: '2'

services:

  myapp:

    build: ./myapp

    ports:

      - "8080:8080"


myapp container실행

$ docker-compose run -d myapp


바인딩된 포트 확인 (아무것도 없음)

$ netstat -nap | grep 8080



원인 및 대책

docker-compose.yml의 ports: 설정은 docker-compose up 명령으로 실행했을 때만 적용됩니다.
docker-compose run 명령 시에도 적용시키고 싶다면 --service-ports 옵션과 함께 실행해야 합니다.

또는 Dockerfile에 EXPOSE를 명시해두면 docker-compose에 ports를 정의할 필요가 없습니다.


myapp container 실행

$ docker-compose run -d --service-ports myapp

$ docker-compose run -d -p 8080:8080 myapp


참고

  1. https://github.com/docker/compose/issues/1259
  2. https://docs.docker.com/compose/reference/run/