Ошибка 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
И это сработало