diff --git a/plugins/00_dokku-standard/commands b/plugins/00_dokku-standard/commands index fbce802ea3f..7613eeb7a5e 100755 --- a/plugins/00_dokku-standard/commands +++ b/plugins/00_dokku-standard/commands @@ -36,7 +36,7 @@ case "$1" in dockerfile) # extract first port from Dockerfile - DOCKERFILE_PORT=$(grep EXPOSE Dockerfile | head -1 | awk '{ print $2 }' || true) + DOCKERFILE_PORT=$(get_dockerfile_exposed_port Dockerfile) [[ -n "$DOCKERFILE_PORT" ]] && dokku config:set-norestart $APP DOKKU_DOCKERFILE_PORT=$DOCKERFILE_PORT # buildstep pluginhooks don't necessarily make sense for dockerfiles. call the new breed!!! diff --git a/plugins/common/functions b/plugins/common/functions index c7afd2bc190..c5d900fc297 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -201,3 +201,12 @@ get_container_ids() { shopt -u nullglob echo $DOKKU_CIDS } + +get_dockerfile_exposed_port() { + local DOCKERFILE_PORT=$(grep "^EXPOSE \+[[:digit:]]\+\(\/tcp\)\? *$" $1 | head -1 | sed 's/EXPOSE \+\([[:digit:]]\+\)\(\/tcp\)\?.*/\1/' || true) + if [[ -n "$DOCKERFILE_PORT" ]]; then + echo "$DOCKERFILE_PORT" + else + echo "" + fi +} diff --git a/tests/apps/dockerfile/Dockerfile b/tests/apps/dockerfile/Dockerfile index cdae029b086..cd47658a53a 100644 --- a/tests/apps/dockerfile/Dockerfile +++ b/tests/apps/dockerfile/Dockerfile @@ -2,7 +2,9 @@ FROM ubuntu:trusty ENV LC_ALL C ENV DEBIAN_FRONTEND noninteractive ENV DEBCONF_NONINTERACTIVE_SEEN true -EXPOSE 3000 +EXPOSE 3001/udp +EXPOSE 3000/tcp +EXPOSE 3003 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/core_ports.bats b/tests/unit/core_ports.bats index c2a6b657de7..696159ce845 100644 --- a/tests/unit/core_ports.bats +++ b/tests/unit/core_ports.bats @@ -5,6 +5,7 @@ load test_helper setup() { [[ -f "$DOKKU_ROOT/VHOST" ]] && cp -f "$DOKKU_ROOT/VHOST" "$DOKKU_ROOT/VHOST.bak" [[ -f "$DOKKU_ROOT/HOSTNAME" ]] && cp -f "$DOKKU_ROOT/HOSTNAME" "$DOKKU_ROOT/HOSTNAME.bak" + DOCKERFILE="$BATS_TMPDIR/Dockerfile" } teardown() { @@ -162,3 +163,29 @@ check_urls() { check_urls http://my-cool-guy-test-app.127.0.0.1.xip.io } + +@test "(core) port exposure (dockerfile raw port)" { + source "$PLUGIN_PATH/common/functions" + cat< $DOCKERFILE +EXPOSE 3001/udp +EXPOSE 3003 +EXPOSE 3000/tcp +EOF + run get_dockerfile_exposed_port $DOCKERFILE + echo "output: "$output + echo "status: "$status + assert_output 3003 +} + +@test "(core) port exposure (dockerfile tcp port)" { + source "$PLUGIN_PATH/common/functions" + cat< $DOCKERFILE +EXPOSE 3001/udp +EXPOSE 3000/tcp +EXPOSE 3003 +EOF + run get_dockerfile_exposed_port $DOCKERFILE + echo "output: "$output + echo "status: "$status + assert_output 3000 +} diff --git a/tests/unit/test_helper.bash b/tests/unit/test_helper.bash index fc4dc443f19..9bb6c4ae4d8 100644 --- a/tests/unit/test_helper.bash +++ b/tests/unit/test_helper.bash @@ -2,6 +2,7 @@ # constants DOKKU_ROOT=${DOKKU_ROOT:=~dokku} +PLUGIN_PATH=${PLUGIN_PATH:="/var/lib/dokku/plugins"} TEST_APP=my-cool-guy-test-app # test functions