diff --git a/dokku b/dokku index 467d0f759cb..3b4a7c26af1 100755 --- a/dokku +++ b/dokku @@ -75,10 +75,12 @@ case "$1" in DOCKER_ARGS+=$(: | pluginhook docker-args-deploy $APP) BIND_EXTERNAL=$(pluginhook bind-external-ip $APP) - is_image_buildstep_based "$IMAGE" && START_CMD="/start web" + is_image_buildstep_based "$IMAGE" && DOKKU_BUILDSTEP=true + [[ -n "$DOKKU_BUILDSTEP" ]] && START_CMD="/start web" + [[ -z "$DOKKU_BUILDSTEP" ]] && eval "$(grep DOKKU_DOCKERFILE_PORT $DOKKU_ROOT/$APP/ENV)" if [[ "$BIND_EXTERNAL" = "false" ]];then - port=5000 + port=${DOKKU_DOCKERFILE_PORT:=5000} id=$(docker run -d -e PORT=$port $DOCKER_ARGS $IMAGE $START_CMD) ipaddr=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' $id) else diff --git a/plugins/00_dokku-standard/commands b/plugins/00_dokku-standard/commands index 364d95606f3..6f8ca6642f6 100755 --- a/plugins/00_dokku-standard/commands +++ b/plugins/00_dokku-standard/commands @@ -34,6 +34,10 @@ case "$1" in ;; dockerfile) + # extract first port from Dockerfile + DOCKERFILE_PORT=$(grep EXPOSE Dockerfile | head -1 | awk '{ print $2 }') + [[ -n "$DOCKERFILE_PORT" ]] && dokku config:set-norestart $APP DOKKU_DOCKERFILE_PORT=$DOCKERFILE_PORT + # sticking with same pattern of building app image before pre-build for now. docker build -t "$IMAGE" . # buildstep pluginhooks don't necessarily make sense for dockerfiles. call the new breed!!! diff --git a/tests/apps/dockerfile/Dockerfile b/tests/apps/dockerfile/Dockerfile index badf138d90e..cdae029b086 100644 --- a/tests/apps/dockerfile/Dockerfile +++ b/tests/apps/dockerfile/Dockerfile @@ -2,7 +2,7 @@ FROM ubuntu:trusty ENV LC_ALL C ENV DEBIAN_FRONTEND noninteractive ENV DEBCONF_NONINTERACTIVE_SEEN true -EXPOSE 5000 +EXPOSE 3000 RUN apt-get install -y software-properties-common && add-apt-repository ppa:chris-lea/node.js && apt-get update RUN apt-get install -y build-essential curl postgresql-client-9.3 nodejs git diff --git a/tests/unit/ports.bats b/tests/unit/ports.bats index bace5c78615..3612c5932cc 100644 --- a/tests/unit/ports.bats +++ b/tests/unit/ports.bats @@ -108,3 +108,11 @@ teardown() { echo "status: "$status assert_success } + +@test "dockerfile port exposure" { + deploy_app dockerfile + run bash -c "grep upstream $DOKKU_ROOT/$TEST_APP/nginx.conf | grep 3000" + echo "output: "$output + echo "status: "$status + assert_success +}