我试图从容器中的用户访问在主机上运行的Docker。我正试图通过将主机上的套接字映射到容器卷来完成此操作。
docker run -it -v /var/run/docker.sock:/var/run/docker.sock myimage bash
在我的主人身上
ls -l
on/var/run/docker.sock显示所有者是我的普通主机用户(不是根用户),但是当我查看容器时,它是由根用户拥有的。因此,当我试图连接到容器内的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或run命令中执行此操作(例如,我的实际应用程序使用docker compose)。
我试过在我的dockerfile中创建一个docker组并将我的用户添加到该组中,但这似乎不起作用,我不知道为什么,但可能是因为我在Mac上,使用GUI安装程序安装了docker。