容器内的 Docker 套接字权限

RSH*_*HAP 5 macos docker dockerfile docker-volume

我正在尝试从容器内的用户访问在我的主机上运行的 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
Run Code Online (Sandbox Code Playgroud)

建立形象

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()
Run Code Online (Sandbox Code Playgroud)

给出权限被拒绝错误。

如何映射卷的正确权限(以及为什么映射卷时它们会发生变化)?是否可以在 Dockerfile 或运行命令中执行此操作(例如,我的实际应用程序正在使用 docker-compose)。

我尝试在 dockerfile 中创建一个 docker 组并将 myuser 添加到该组,但这似乎不起作用,我不确定为什么,但可能是因为我在 mac 上并使用 gui 安装程序安装了 docker

Dmi*_*rii 0

简单更改用户的UID,

RUN useradd -ms /bin/bash -d /usr/local/myuser -u ${UID} myuser
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式获取 UID

id 
Run Code Online (Sandbox Code Playgroud)

在终端