Я пытаюсь получить доступ к докеру, запущенному на моем хосте, от пользователя внутри контейнера. Я пытаюсь сделать это путем сопоставления сокета на моем хосте с объемом контейнера 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