diff --git a/docs/nginx.md b/docs/nginx.md index d309e2298..1f2688b97 100644 --- a/docs/nginx.md +++ b/docs/nginx.md @@ -141,7 +141,7 @@ dokku domains:remove myapp example.com > New as of 0.3.13 -The deployed docker container running your app's web process will bind to either the internal docker network interface (i.e. `docker inspect --format '{{ .NetworkSettings.IPAddress }}' $CONTAINER_ID`) or an external interface (i.e. 0.0.0.0) depending on dokku's VHOST configuration. Dokku will attempt to bind to the internal docker network interface unless you specifically set NO_VHOST for the given app or your dokku installation is not setup to use VHOSTS (i.e. $DOKKU_ROOT/VHOST or $DOKKU_ROOT/HOSTNAME is set to an IPv4 or IPv6 address) +The deployed docker container running your app's web process will bind to either the internal docker network interface (i.e. `docker inspect --format '{{ .NetworkSettings.IPAddress }}' $CONTAINER_ID`) or an external interface (i.e. 0.0.0.0) depending on dokku's VHOST configuration. Dokku will attempt to bind to the internal docker network interface unless you specifically set NO_VHOST for the given app or your dokku installation is not setup to use VHOSTS (i.e. $DOKKU_ROOT/VHOST is missing or $DOKKU_ROOT/HOSTNAME is set to an IPv4 or IPv6 address) ```shell # container bound to docker interface diff --git a/plugins/domains/commands b/plugins/domains/commands index 9ae7bec38..cfbd5a859 100755 --- a/plugins/domains/commands +++ b/plugins/domains/commands @@ -38,8 +38,8 @@ case "$1" in else VHOST=$(< "$DOKKU_ROOT/HOSTNAME") fi - if [[ "$VHOST" =~ $RE_IPV4 ]] || [[ "$VHOST" =~ $RE_IPV6 ]];then - echo "ip found as hostname. disabling vhost support" + if [[ "$VHOST" =~ $RE_IPV4 ]] || [[ "$VHOST" =~ $RE_IPV6 ]] || [[ ! -f "$DOKKU_ROOT/VHOST" ]];then + echo "unsupported vhost config found. disabling vhost support" [[ ! $(grep -q NO_VHOST "$DOKKU_ROOT/$APP/ENV") ]] && echo "export NO_VHOST='1'" >> "$DOKKU_ROOT/$APP/ENV" else echo "-----> Creating new $VHOST_PATH..." diff --git a/plugins/nginx-vhosts/bind-external-ip b/plugins/nginx-vhosts/bind-external-ip index 636bc894c..7cfc2a54d 100755 --- a/plugins/nginx-vhosts/bind-external-ip +++ b/plugins/nginx-vhosts/bind-external-ip @@ -19,14 +19,10 @@ RE_IPV6="${RE_IPV6}fe08:(:[0-9a-fA-F]{1,4}){2,2}%[0-9a-zA-Z]{1,}|" # TEST: f RE_IPV6="${RE_IPV6}::(ffff(:0{1,4}){0,1}:){0,1}${RE_IPV4}|" # TEST: ::255.255.255.255 ::ffff:255.255.255.255 ::ffff:0:255.255.255.255 (IPv4-mapped IPv6 addresses and IPv4-translated addresses) RE_IPV6="${RE_IPV6}([0-9a-fA-F]{1,4}:){1,4}:${RE_IPV4}" # TEST: 2001:db8:3:4::192.0.2.33 64:ff9b::192.0.2.33 -if [[ -f "$DOKKU_ROOT/VHOST" ]];then - GLOBAL_VHOST=$(< "$DOKKU_ROOT/VHOST") -else - GLOBAL_VHOST=$(< "$DOKKU_ROOT/HOSTNAME") -fi +[[ -f "$DOKKU_ROOT/VHOST" ]] && GLOBAL_VHOST=$(< "$DOKKU_ROOT/VHOST") -if [[ -n "$NO_VHOST" ]]; then - echo true # bind to external ip. VHOST is disabled for this app +if [[ -n "$NO_VHOST" ]] || [[ -z "$GLOBAL_VHOST" ]]; then + echo true # bind to external ip. VHOST is disabled elif [[ "$GLOBAL_VHOST" =~ $RE_IPV4 ]] || [[ "$GLOBAL_VHOST" =~ $RE_IPV6 ]]; then echo true # bind to external ip. GLOBAL_VHOST is somehow an IPv4 or IPv6 address elif [[ -f "$DOKKU_ROOT/$APP/VHOST" ]]; then diff --git a/tests/unit/ports.bats b/tests/unit/ports.bats index 9e641eed3..a1fbe8333 100644 --- a/tests/unit/ports.bats +++ b/tests/unit/ports.bats @@ -32,7 +32,7 @@ teardown() { run bash -c "docker port $CONTAINER_ID | sed 's/[0-9.]*://' | egrep '[0-9]*'" echo "output: "$output echo "status: "$status - assert_failure + assert_success } @test "port exposure (with NO_VHOST set)" {