'Run docker inside docker as non root user

How can I run docker commands inside a docker container when the user is not root?

The reason behind this (running as non root) is that the (first) container creates some files on a mounted volume. If the user in the container is root then these files' owner is also root. If I run the container with the same user as on the host system then these files have the correct user and group.

docker run --rm -it -u $(id -u):$(id -g) -v /var/run/docker.sock:/var/run/docker.sock ubuntu /bin/bash

// inside container:
// assume docker binary is available
docker pull alpine

This will not work when run as a non root user giving following error:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=alpine&tag=latest: dial unix /var/run/docker.sock: connect: permission denied


Solution 1:[1]

Docker:

docker run -it -u $(id -u):$(id -g) --group-add $(getent group docker | cut -d ':' -f 3) --rm -v /var/run/docker.sock:/var/run/docker.sock docker docker --version

For Docker Compose set group_add under your service and set the env variable:

export DOCKER_GROUP_ID=$(getent group docker | cut -d ':' -f 3);
services:
  myservice:
    image: docker
    group_add:
      - ${DOCKER_GROUP_ID}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 T3rm1