Configure ccache directory.
diff --git a/tools/jenkins/build_and_run_docker.sh b/tools/jenkins/build_and_run_docker.sh
index e77ffd6..448b00c 100755
--- a/tools/jenkins/build_and_run_docker.sh
+++ b/tools/jenkins/build_and_run_docker.sh
@@ -52,12 +52,18 @@
 # Choose random name for docker container
 CONTAINER_NAME="build_and_run_docker_$(uuidgen)"
 
+# Ensure existence of ccache directory
+CCACHE_DIR=/tmp/protobuf-ccache
+mkdir -p $CCACHE_DIR
+
 # Run command inside docker
 docker run \
   "$@" \
+  -e CCACHE_DIR=$CCACHE_DIR \
   -e EXTERNAL_GIT_ROOT="/var/local/jenkins/protobuf" \
   -e THIS_IS_REALLY_NEEDED='see https://github.com/docker/docker/issues/14203 for why docker is awful' \
   -v "$git_root:/var/local/jenkins/protobuf:ro" \
+  -v $CCACHE_DIR:$CCACHE_DIR \
   -w /var/local/git/protobuf \
   --name=$CONTAINER_NAME \
   $DOCKER_IMAGE_NAME \
diff --git a/tools/run_tests/tests.sh b/tools/run_tests/tests.sh
index 7ada81f..353ce62 100755
--- a/tools/run_tests/tests.sh
+++ b/tools/run_tests/tests.sh
@@ -103,7 +103,7 @@
 }
 
 # --batch-mode supresses download progress output that spams the logs.
-MVN=mvn --batch-mode
+MVN="mvn --batch-mode"
 
 build_java() {
   # Java build needs `protoc`.
@@ -125,7 +125,7 @@
 build_javanano() {
   # Java build needs `protoc`.
   internal_build_cpp
-  cd javanano && mvn test && cd ..
+  cd javanano && $MVN test && cd ..
 }
 
 build_java_jdk6() {