diff --git a/docker/pinocchio/Dockerfile.nolts b/docker/pinocchio/Dockerfile.nolts
new file mode 100644
index 0000000000000000000000000000000000000000..0987447254e2a1011385c9327e6697aa4bdc1839
--- /dev/null
+++ b/docker/pinocchio/Dockerfile.nolts
@@ -0,0 +1,64 @@
+ARG UBUNTU=disco
+FROM ubuntu:$UBUNTU
+
+SHELL ["/bin/bash", "-c"]
+
+ARG UBUNTU=disco
+ARG PYTHON=python3
+ARG HPP_FCL=1.1.3
+ARG EIGENPY=1.6.0
+ARG MAKE_JOBS=1
+
+ENV CTEST_PARALLEL_LEVEL=$MAKE_JOBS CTEST_OUTPUT_ON_FAILURE=true PYTHON=$PYTHON
+
+RUN apt-get update -y \
+ && apt-get install -y \
+    assimp-utils \
+    build-essential \
+    cmake \
+    curl \
+    git \
+    libassimp-dev \
+    libboost-all-dev \
+    libccd-dev \
+    libeigen3-dev \
+    liboctomap-dev \
+    lib${PYTHON}\*-dev \
+    libtinyxml-dev \
+    liburdfdom-dev \
+    ${PYTHON/2/} \
+    ${PYTHON/2/}-numpy \
+ && rm -rf /var/lib/apt/lists/*
+
+# hpp-fcl
+ADD https://github.com/humanoid-path-planner/hpp-fcl/releases/download/v${HPP_FCL}/hpp-fcl-${HPP_FCL}.tar.gz /
+RUN tar xvf /hpp-fcl-${HPP_FCL}.tar.gz \
+ && mkdir /hpp-fcl-${HPP_FCL}/build \
+ && cd /hpp-fcl-${HPP_FCL}/build \
+ && cmake .. \
+ && make -j$MAKE_JOBS \
+ && make install
+
+# eigenpy
+ADD https://github.com/stack-of-tasks/eigenpy/releases/download/v${EIGENPY}/eigenpy-${EIGENPY}.tar.gz /
+RUN tar xvf /eigenpy-${EIGENPY}.tar.gz \
+ && mkdir /eigenpy-${EIGENPY}/build \
+ && cd /eigenpy-${EIGENPY}/build \
+ && cmake -DPYTHON_EXECUTABLE=$(which $PYTHON) .. \
+ && make -j$MAKE_JOBS \
+ && make install
+
+# (in)validate docker build cache with the HTTP "Last-Modified" header from github
+ARG NAMESPACE=stack-of-tasks
+ARG BRANCH=devel
+ADD https://github.com/$NAMESPACE/pinocchio/archive/$BRANCH.zip .
+
+# but this zip doesn't come with .git nor submodules
+RUN git clone --recursive --branch $BRANCH https://github.com/$NAMESPACE/pinocchio.git \
+ && mkdir pinocchio/build
+
+WORKDIR /pinocchio/build
+
+RUN cmake -DPYTHON_EXECUTABLE=$(which $PYTHON) .. \
+ && make -j${MAKE_JOBS} \
+ || true