diff --git a/src/docker/run/Dockerfile b/Dockerfile
similarity index 83%
rename from src/docker/run/Dockerfile
rename to Dockerfile
index 5fc5c1e5841532450452dec2421e6f0dc3c5ad82..e93efdf3e9525cdc8efa0eb13e951cb990ce9054 100644
--- a/src/docker/run/Dockerfile
+++ b/Dockerfile
@@ -7,7 +7,8 @@ RUN wget https://github.com/jwilder/dockerize/releases/download/v0.2.0/dockerize
 RUN tar -C /usr/local/bin -xvzf dockerize-linux-amd64-v0.2.0.tar.gz
 
 COPY ./target/portal-backend-DOCKER_BUILD.jar backend.jar
-COPY ./config/application.tmpl /config/application.tmpl
+COPY ./docker/runner/config/application.tmpl /config/application.tmpl
+COPY ./docker/runner/README.md /
 
 EXPOSE 8080
 
diff --git a/src/docker/build/Dockerfile b/Dockerfile.builder
similarity index 81%
rename from src/docker/build/Dockerfile
rename to Dockerfile.builder
index 51495aebc40e0272e2d8fe8ec0eba86b80b144b3..97dee452d9671ff8925e0a71c15bbcf99d2b30f0 100644
--- a/src/docker/build/Dockerfile
+++ b/Dockerfile.builder
@@ -6,7 +6,7 @@ MAINTAINER mirco.nasuti@chuv.ch
 RUN adduser --quiet --uid 1000 build
 USER build
 
-COPY ./build-in-docker.sh /build-in-docker.sh
+COPY ./docker/builder/build-in-docker.sh /build-in-docker.sh
 
 VOLUME /opt/portal/
 WORKDIR /opt/portal/
diff --git a/build.sh b/build.sh
index b524f3458aabc7a22c277bff1f0c92aec25516fe..ef6b408040b10c61cf605b0fab9bc9ca1f0d83f2 100755
--- a/build.sh
+++ b/build.sh
@@ -1,4 +1,29 @@
 #!/usr/bin/env bash
+set -e
 
-export WORKSPACE=$(pwd)
-captain build
+get_script_dir () {
+     SOURCE="${BASH_SOURCE[0]}"
+
+     while [ -h "$SOURCE" ]; do
+          DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+          SOURCE="$( readlink "$SOURCE" )"
+          [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
+     done
+     cd -P "$( dirname "$SOURCE" )"
+     pwd
+}
+
+export WORKSPACE=$(get_script_dir)
+
+if pgrep -lf sshuttle > /dev/null ; then
+  echo "sshuttle detected. Please close this program as it messes with networking and prevents builds inside Docker to work"
+  exit 1
+fi
+
+if groups $USER | grep &>/dev/null '\bdocker\b'; then
+  CAPTAIN="captain"
+else
+  CAPTAIN="sudo captain"
+fi
+
+$CAPTAIN build
diff --git a/captain.yml b/captain.yml
index a6d4355766eab826f0b82de8232e410709be876c..6ece2f343b07cfb79604a66b67949ed4881c842a 100644
--- a/captain.yml
+++ b/captain.yml
@@ -1,25 +1,23 @@
-portal-backend-build:
-  build: ./src/docker/build/Dockerfile
-  image: hbpmip/portal-backend-build
+# Builder image
+# Creates a portable environemnt to build this project.
+# Do not push this image to Docker hub.
+builder:
+  build: Dockerfile.builder
+  image: portal-backend-builder
   pre:
-    - echo "Building portal-backend-build"
+    - echo "Building portal backend builder"
   post:
     - docker run --rm -v $WORKSPACE:/opt/portal/ -v $HOME/.m2:/home/build/.m2/ hbpmip/portal-backend-build
-    - echo "Finished building portal-backend-build"
+    - echo "Finished building portal backend builder"
   test:
     - ./tests/test-build.sh
 
 portal-backend:
-  build: ./src/docker/run/Dockerfile
+  build: Dockerfile
   image: hbpmip/portal-backend
   pre:
     - echo "Building portal-backend"
-    - mkdir -p $WORKSPACE/src/docker/run/config $WORKSPACE/src/docker/run/target
-    - cp $WORKSPACE/config/application.tmpl $WORKSPACE/src/docker/run/config/
-    - cp $WORKSPACE/target/*.jar $WORKSPACE/src/docker/run/target/
   post:
-    - rm -rf $WORKSPACE/src/docker/run/target/
-    - rm -rf $WORKSPACE/src/docker/run/config/
     - echo "Finished building portal-backend"
   test:
     - ./tests/pre-test-run.sh
diff --git a/src/docker/build/build-in-docker.sh b/docker/builder/build-in-docker.sh
similarity index 100%
rename from src/docker/build/build-in-docker.sh
rename to docker/builder/build-in-docker.sh
diff --git a/src/docker/run/README.md b/docker/runner/README.md
similarity index 100%
rename from src/docker/run/README.md
rename to docker/runner/README.md
diff --git a/config/application.tmpl b/docker/runner/config/application.tmpl
similarity index 99%
rename from config/application.tmpl
rename to docker/runner/config/application.tmpl
index dc4987a138f9f54b84b03e2cb18b099c24c76c2c..9bed8c6b6dc98a946b2166a594e646f9448cc8f8 100644
--- a/config/application.tmpl
+++ b/docker/runner/config/application.tmpl
@@ -54,7 +54,7 @@ server:
     timeout: {{ default .Env.SESSION_TIMEOUT "2592000" }}
 
 # ENDPOINTS
-endpoints
+endpoints:
   enabled: true
   health:
     enabled: true
diff --git a/src/docker/run/slack.json b/docker/runner/slack.json
similarity index 100%
rename from src/docker/run/slack.json
rename to docker/runner/slack.json
diff --git a/docker_push.sh b/docker_push.sh
index 60630424822d0160707c4390758cf97851538de4..8da8206935b4f07fe6472722ec3814e23f433314 100755
--- a/docker_push.sh
+++ b/docker_push.sh
@@ -14,5 +14,17 @@ get_script_dir () {
 }
 
 export WORKSPACE=$(get_script_dir)
-captain push --branch-tags=false --commit-tags=true portal-backend
-curl -k -X POST --data-urlencode payload@$WORKSPACE/src/docker/run/slack.json https://hbps1.chuv.ch/slack/dev-activity
+
+if pgrep -lf sshuttle > /dev/null ; then
+  echo "sshuttle detected. Please close this program as it messes with networking and prevents builds inside Docker to work"
+  exit 1
+fi
+
+if groups $USER | grep &>/dev/null '\bdocker\b'; then
+  CAPTAIN="captain"
+else
+  CAPTAIN="sudo captain"
+fi
+
+$CAPTAIN push --branch-tags=false --commit-tags=true portal-backend
+curl -k -X POST --data-urlencode payload@$WORKSPACE/docker/runner/slack.json https://hbps1.chuv.ch/slack/dev-activity
diff --git a/test.sh b/test.sh
index 4097b32beaf621619218230ae5d30bea4117faa9..98d351fcc283147034ce9b006c905bbb31f2d186 100755
--- a/test.sh
+++ b/test.sh
@@ -1,4 +1,29 @@
 #!/usr/bin/env bash
+set -e
 
-export WORKSPACE=$(pwd)
-captain test
\ No newline at end of file
+get_script_dir () {
+     SOURCE="${BASH_SOURCE[0]}"
+
+     while [ -h "$SOURCE" ]; do
+          DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+          SOURCE="$( readlink "$SOURCE" )"
+          [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
+     done
+     cd -P "$( dirname "$SOURCE" )"
+     pwd
+}
+
+export WORKSPACE=$(get_script_dir)
+
+if pgrep -lf sshuttle > /dev/null ; then
+  echo "sshuttle detected. Please close this program as it messes with networking and prevents builds inside Docker to work"
+  exit 1
+fi
+
+if groups $USER | grep &>/dev/null '\bdocker\b'; then
+  CAPTAIN="captain"
+else
+  CAPTAIN="sudo captain"
+fi
+
+$CAPTAIN test