容器内的Docker套接字权限

时间:2019-03-15 20:46:55

标签: macos docker dockerfile docker-volume

我正在尝试从容器中的用户访问在主机上运行的docker。我正在尝试通过将主机上的套接字映射到容器卷docker run -it -v /var/run/docker.sock:/var/run/docker.sock myimage bash

来执行此操作 在/var/run/docker.sock上的主机ls -l上的

显示所有者是我的普通主机用户(不是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或run命令中执行此操作(例如,我的实际应用程序正在使用docker-compose)。

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

1 个答案:

答案 0 :(得分:0)

用户的简单更改UID,

Tuple

可以通过以下方式获取UID

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

在终端