diff --git a/Dockerfile b/Dockerfile
index f56ed02530b41b6c3c40dddd9825ec21ad1f45c4..ff364b1138deeefe15ac7c5356a2aa0e543103dc 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -6,7 +6,16 @@
 # docker build -t nav2:latest \
 #   --build-arg UNDERLAY_MIXINS \
 #   --build-arg OVERLAY_MIXINS ./
-ARG FROM_IMAGE=osrf/ros2:nightly
+ARG FROM_IMAGE=osrf/ros2:old-nightly
+FROM $FROM_IMAGE as package_cache
+
+WORKDIR /tmp
+COPY ./ ./src
+RUN mkdir ./cache && \
+    cd ./src && \
+    find ./ -name "package.xml" | \
+    xargs cp --parents -t ../cache
+
 FROM $FROM_IMAGE
 
 # install CI dependencies	
@@ -54,22 +63,26 @@ RUN . /opt/ros/$ROS_DISTRO/setup.sh && \
       exit 1; \
     fi
 
-# copy overlay source
+# copy overlay packages
 ENV OVERLAY_WS /opt/overlay_ws
 RUN mkdir -p $OVERLAY_WS/src
 WORKDIR $OVERLAY_WS
-COPY ./ src/navigation2/
+COPY --from=package_cache /tmp/cache src/navigation2/
 
 # install overlay dependencies
 RUN . $UNDERLAY_WS/install/setup.sh && \
     apt-get update && \
     rosdep install -q -y \
+      --verbose \
       --from-paths \
         $UNDERLAY_WS/src \
         src \
       --ignore-src \
     && rm -rf /var/lib/apt/lists/*
 
+# copy overlay source
+COPY ./ src/navigation2/
+
 # build overlay source
 ARG OVERLAY_MIXINS="release ccache"
 RUN . $UNDERLAY_WS/install/setup.sh && \