diff --git a/docker/pinocchio/Dockerfile b/docker/pinocchio/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..30d37d2cc95866cd9f8978dcc84bfa0a2cbcf172
--- /dev/null
+++ b/docker/pinocchio/Dockerfile
@@ -0,0 +1,50 @@
+ARG UBUNTU=bionic
+FROM ubuntu:$UBUNTU
+
+# Setup Robotpkg apt binary repository
+ARG UBUNTU=bionic
+RUN apt-get update -qqy && apt-get install -qqy \
+    build-essential \
+    cmake \
+    curl \
+    git \
+ && echo "deb [arch=amd64] http://robotpkg.openrobots.org/packages/debian/pub $UBUNTU robotpkg" \
+ >> /etc/apt/sources.list.d/robotpkg.list \
+ && curl http://robotpkg.openrobots.org/packages/debian/robotpkg.key | apt-key add - \
+ && rm -rf /var/lib/apt/lists/*
+
+ENV ROBOTPKG_BASE=/opt/openrobots
+ENV CMAKE_PREFIX_PATH=$ROBOTPKG_BASE:$CMAKE_PREFIX_PATH \
+      LD_LIBRARY_PATH=$ROBOTPKG_BASE/lib:$ROBOTPKG_BASE/lib/plugin:$LD_LIBRARY_PATH \
+                 PATH=$ROBOTPKG_BASE/bin:$ROBOTPKG_BASE/sbin:$PATH \
+      PKG_CONFIG_PATH=$ROBOTPKG_BASE/lib/pkgconfig:$PKG_CONFIG_PATH \
+     ROS_PACKAGE_PATH=$ROBOTPKG_BASE/share:$ROS_PACKAGE_PATH
+
+# get Pinocchio dependencies
+ARG PYTHON=python2
+RUN apt-get update -qqy \
+ && apt-get install -qqy \
+    $(echo $PYTHON | sed 's/2//') \
+ && apt-get install -qqy \
+    libeigen3-dev \
+    liburdfdom-dev \
+    libtinyxml-dev \
+    robotpkg-hpp-fcl \
+    robotpkg-py$($PYTHON -V 2>&1 | sed 's/.*\([23]\)\.\([0-9]\).*/\1\2/')-eigenpy \
+ && rm -rf /var/lib/apt/lists/*
+
+# (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
+ARG MAKE_JOBS=1
+RUN cmake -DPYTHON_EXECUTABLE=$(which $PYTHON) .. \
+ && make -j$(MAKE_JOBS)
+
+CMD make test
diff --git a/docker/pinocchio/README.md b/docker/pinocchio/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..4d9a649d3ebc77ccfb1d4a893028cd16a626a160
--- /dev/null
+++ b/docker/pinocchio/README.md
@@ -0,0 +1,48 @@
+# Pinocchio Dockerfile
+
+If the buildfarm doesn't work in your case, you could use this.
+
+# Build images
+
+```
+docker build -t gepetto/utils:pinocchio-18.04 .
+docker build -t gepetto/utils:pinocchio-16.04 --build-arg UBUNTU=xenial .
+docker build -t gepetto/utils:pinocchio-14.04 --build-arg UBUNTU=trusty .
+docker build -t gepetto/utils:pinocchio-18.04-py3 --build-arg PYTHON=python3 .
+```
+
+# Push images
+
+```
+docker push gepetto/utils:pinocchio-18.04
+docker push gepetto/utils:pinocchio-16.04
+docker push gepetto/utils:pinocchio-14.04
+docker push gepetto/utils:pinocchio-18.04-py3
+```
+
+# Pull an image
+
+```
+docker pull gepetto/utils:pinocchio-18.04
+docker pull gepetto/utils:pinocchio-16.04
+docker pull gepetto/utils:pinocchio-14.04
+docker pull gepetto/utils:pinocchio-18.04-py3
+```
+
+# Run test
+
+```
+docker run --rm -it gepetto/utils:pinocchio-18.04
+docker run --rm -it gepetto/utils:pinocchio-16.04
+docker run --rm -it gepetto/utils:pinocchio-14.04
+docker run --rm -it gepetto/utils:pinocchio-18.04-py3
+```
+
+# Enter in the image
+
+```
+docker run --rm -it gepetto/utils:pinocchio-18.04 bash
+docker run --rm -it gepetto/utils:pinocchio-16.04 bash
+docker run --rm -it gepetto/utils:pinocchio-14.04 bash
+docker run --rm -it gepetto/utils:pinocchio-18.04-py3 bash
+```