Ошибка Docker в Docker

У меня есть докер в настройке докера для CI. По сути, на машине есть сервер CI jenkins, который использует один и тот же сокет для докеров для создания узлов для CI.

Это работало отлично, пока я недавно не обновил докер. Я определил проблему, но я не могу понять, как правильно магия, чтобы заставить ее работать.

host $ docker exec -it myjenkins bash
[email protected] $ docker ps
Got permission denied while trying to connect to the Docker daemon 
socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/json: dial unix /var/run/docker.sock: connect: permission denied

host $ docker exec -it -u root -it myjenkins bash
[email protected] $ docker ps 
... docker ps from host container yay! ...

Итак, вот что я догадываюсь. У меня есть доступ к сокету-докере хоста из контейнера, но я не могу дать разрешение пользователю jenkins.

Я добавил группу докеров, а также добавил пользователя jenkins в группу докеров. Но я все равно получаю ту же ошибку. Я перезапустил так много раз, поэтому я немного растерялся, что делать дальше.

Есть ли способ принудительного разрешения для пользователя в конкретном сокете?

Ответ 1

Вам нужно сопоставить gid группы докеров на своем хосте с группой группы, в которой jenkins принадлежит внутри вашего контейнера. Здесь образец из моего Dockerfile о том, как я создал рабское изображение jenkins:

ARG DOCKER_GID=993

RUN groupadd -g ${DOCKER_GID} docker \
  && curl -sSL https://get.docker.com/ | sh \
  && apt-get -q autoremove \
  && apt-get -q clean -y \
  && rm -rf /var/lib/apt/lists/* /var/cache/apt/*.bin 

RUN useradd -m -d /home/jenkins -s /bin/sh jenkins \
  && usermod -aG docker jenkins

В этом примере 993, похоже, является док-станцией на хосте, вы должны настроить его так, чтобы он соответствовал вашей среде.


Решение из OP: Если перестройка не является возможностью, вы можете установить группу докеров в порядке использования root и добавить пользователя. Если вы попробовали это, прежде чем вам удастся удалить группу на подчиненном устройстве (groupdel docker):

docker exec -it -u root myjenkins bash
container $ groupadd -g 993 docker
container $ usermod -aG docker jenkins

Ответ 2

Выполните команду с вашим корневым пользователем, включив sudo в начало.

Ответ 3

Лично я просто должен был сделать это:

sudo gpasswd -a $USER docker 

И это сработало