我试图从容器内的用户访问运行在我的主机上的Docker。我尝试通过将主机上的套接字映射到容器卷来实现这一点:
在我的主机上,
docker run -it -v /var/run/docker.sock:/var/run/docker.sock myimage bash
。在我的主机上,
ls -l
/var/run/docker.sock显示所有者是我的普通主机用户(而不是root),但当我查看容器时,它被root所拥有。因此,在尝试连接容器内的Docker时,我会收到“权限被拒绝”的错误提示。以下是一个示例镜像。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 Shell
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或运行命令中进行此操作(例如,我的实际应用程序正在使用docker-compose)。
我已经尝试在我的dockerfile中创建一个docker组,并将myuser添加到该组,但似乎没有起作用,我不确定为什么,可能是因为我在Mac上使用GUI安装程序安装了docker。