Разрешения сокета Docker внутри контейнера - PullRequest
3 голосов
/ 15 марта 2019

Я пытаюсь получить доступ к докеру, запущенному на моем хосте, от пользователя внутри контейнера. Я пытаюсь сделать это путем сопоставления сокета на моем хосте с объемом контейнера docker run -it -v /var/run/docker.sock:/var/run/docker.sock myimage bash

на моем хосте ls -l в /var/run/docker.sock показывает, что владельцем является мой обычный пользователь хоста (не root), но когда я смотрю в контейнер, он принадлежит root. Следовательно, я получаю «разрешение отказано» при попытке подключиться к докеру внутри контейнера. Вот пример изображения

FROM ubuntu:latest
USER root

RUN apt-get update -y && apt-get upgrade -y \
    && apt-get install -y python python-dev python3.6 python-pip 
virtualenv libssl-dev libpq-dev git build-essential libfontconfig1 
libfontconfig1-dev
RUN pip install setuptools docker


RUN useradd -ms /bin/bash -d /usr/local/myuser myuser
RUN chown -R myuser: /usr/local/myuser
USER myuser

построить изображение

docker build -t myimage .

запустить оболочку bash

docker run -it -v /var/run/docker.sock:/var/run/docker.sock myimage bash

попробуйте например подключиться через python

python -c "import docker; c = docker.from_env(); c.containers.list()

выдает ошибку отказа в разрешении.

Как я могу сопоставить правильные разрешения тома (и почему они меняются, когда я сопоставляю том)? И возможно ли это сделать в Dockerfile или в команде run (например, мое настоящее приложение использует docker-compose).

Я попытался создать группу Docker в моем файле Docker и добавить myuser в группу, но это, похоже, не работает, я не уверен, почему, но возможно, потому что я на Mac и установил Docker с помощью установщика GUI

1 Ответ

0 голосов
/ 16 марта 2019

Простой UID изменения пользователя,

RUN useradd -ms /bin/bash -d /usr/local/myuser -u ${UID} myuser

, где UID может быть получен через

id 

в терминале

...