Update par files in a Docker container with known-good Python interpreter
diff --git a/tools/update_tools/Dockerfile b/tools/update_tools/Dockerfile
new file mode 100644
index 0000000..4439eb8
--- /dev/null
+++ b/tools/update_tools/Dockerfile
@@ -0,0 +1,21 @@
+FROM gcr.io/gcp-runtimes/ubuntu_16_0_4:latest
+
+# Install Bazel (https://docs.bazel.build/versions/master/install-ubuntu.html)
+RUN apt-get update -y && apt-get install openjdk-8-jdk -y
+RUN echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | tee /etc/apt/sources.list.d/bazel.list
+RUN curl https://bazel.build/bazel-release.pub.gpg | apt-key add -
+RUN apt-get update -y && apt-get install bazel -y
+RUN bazel help info >/dev/null 2>&1
+
+# Install Python 2.7.12
+RUN apt-get install python -y
+
+# Build par files.  We have a source and work directory to avoid
+# stomping on other files as root.
+CMD cp -r /opt/rules_python_source /opt/rules_python && \
+    cd /opt/rules_python && \
+    bazel clean && \
+    bazel build //rules_python:piptool.par //rules_python:whltool.par && \
+    cp bazel-bin/rules_python/piptool.par bazel-bin/rules_python/whltool.par /opt/rules_python_source/tools/ && \
+    chown --reference=/opt/rules_python_source/update_tools.sh /opt/rules_python_source/tools/piptool.par /opt/rules_python_source/tools/whltool.par
+
diff --git a/update_tools.sh b/update_tools.sh
index 5f00e9c..748c9b7 100755
--- a/update_tools.sh
+++ b/update_tools.sh
@@ -16,6 +16,18 @@
 
 set -euo pipefail
 
-bazel build //rules_python:piptool.par //rules_python:whltool.par
-cp bazel-bin/rules_python/piptool.par tools/piptool.par
-cp bazel-bin/rules_python/whltool.par tools/whltool.par
+usage() {
+  echo "Usage: $0 [--nodocker]" 1>&2
+  exit 1
+}
+
+if [ "$#" -eq 0 ] ; then
+  docker build -f tools/update_tools/Dockerfile --tag rules_python:update_tools .
+  docker run -v"$PWD":/opt/rules_python_source rules_python:update_tools
+elif [ "$#" -eq 1 -a "$1" == "--nodocker" ] ; then
+  bazel build //rules_python:piptool.par //rules_python:whltool.par
+  cp bazel-bin/rules_python/piptool.par tools/piptool.par
+  cp bazel-bin/rules_python/whltool.par tools/whltool.par
+else
+  usage
+fi