容器内的Docker套接字权限

5
我试图从容器内的用户访问运行在我的主机上的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。

1个回答

0

更改用户UID简单易行,

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

UID可以通过以下方式获取

id 

在终端中


仍然拒绝许可。在容器中,套接字仍由root拥有,在我的主机上则由我的${UID}拥有。 - RSHAP
似乎在MacOS上Python Docker无法工作,您可以通过运行docker run -it -v /var/run/docker.sock:/var/run/docker.sock ddmitrii/support curl --unix-socket /var/run/docker.sock http://localhost/images/json来进行检查。 - Dmitrii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接