0

This question is related to this but I am trying to avoid solutions which make use of chmod. I can't change the permissions of /var/run/docker.sock inside the Dockerfile because it is a volume and I am looking to not have to manually interfere with the environment. I am running on MacOS.

I have a Dockerfile which installs the docker engine into a debian based container, and adds a user xyz to the group docker.

FROM debian

USER root

# https://docs.docker.com/engine/install/debian/
RUN apt-get update
RUN apt-get --yes install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | \
    gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
RUN echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

RUN apt-get update
RUN apt-get --yes install docker-ce docker-ce-cli containerd.io

RUN useradd xyz
RUN usermod -a -G docker xyz
RUN newgrp docker

USER xyz

This is my docker-compose.yml:

services:
  my_service:
    build:
      context: .
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: tail -f /dev/null

The user xyz gets created and gets added to the docker group which according to Docker's instructions here should be enough to allow the user xyz access to the docker socket but I still find permission issues.

> docker compose exec my_service whoami   
xyz


> docker compose exec my_service groups
xyz docker


> docker compose exec my_service docker run hello-world
docker: 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/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Hopefully this is reproducible for others - it would be good to know whether others experience the same issue.

Ross
  • 521
  • 1
  • 4
  • 16
  • Group and user names don't mean anything; permissions are enforced based on their _numeric_ user and group IDs. Since these will differ from system to system you can't really set them in your Dockerfile. – David Maze Sep 16 '21 at 11:25

0 Answers0