当前位置: 首页 > 知识库问答 >
问题:

对位于的Docker守护程序套接字的权限被拒绝unix:///var/run/docker.sock

墨承泽
2023-03-14

我有这个Dockerfile

FROM chekote/gulp:latest 

USER root
RUN apt-get update \
      && apt-get upgrade -y \
      && apt-get install -y sudo libltdl-dev

ARG dockerUser='my-user-name';
ARG group='docker';

# crate group if not exists
 RUN if ! grep -q -E "^$group:" /etc/group; then groupadd $group; fi

# create user if not exists
 RUN if ! grep -q -E "^$dockerUser:" /etc/passwd; then useradd -c 'Docker image creator' -m -s '/bin/bash' -g $group $dockerUser; fi

# add user to the group (if it was present and not created at the line above)
 RUN usermod -a -G ${group} ${dockerUser}

# set default user that runs the container
 USER ${dockerUser}

我是这样建造的:

docker build --tag my-gulp:latest .

最后通过脚本这样运行:

#!/bin/bash

image="my-gulp:latest";
workDir='/home/gulp/project';

docker run -it --rm  \
-v $(pwd):${workDir} \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
${image} /bin/bash

这会将我正确地记录到docker容器中,但当我想查看图像时

docker images

或者试着拉图像

docker pull hello-world:latest

我得到这个错误:

尝试连接到处的Docker守护程序套接字时,权限被拒绝unix:///var/run/docker.sock:收到http:///var/run/docker.sock/v1.38/images/json:拨unix/var/run/docker。sock:connect:权限被拒绝

如何创建docker图像从chekote/gup:最新的所以我可以使用docker里面没有错误?

或者错误是因为错误的docker运行命令?

共有3个答案

汪玮
2023-03-14

打开终端并键入此命令

sudo chmod 666 /var/run/docker.sock

让我知道结果...

穆城
2023-03-14

权限匹配仅在数字用户ID和组ID上进行。如果套接字文件为模式0660,由用户ID 0和组ID 32拥有,并且您以用户ID 1000和组ID 1000和16的用户身份调用它,如果一个/etc/group文件名gid32为docker,而另一个文件名gid16相同,则无所谓;数字GID不同,您无法访问该文件。此外,由于Docker组的实际数字gid会因系统而异,因此您无法将其烘焙到Docker文件中。

许多Docker映像只是作为根运行;如果他们这样做,他们可以访问绑定挂载的Docker套接字文件,而不管其权限如何。

如果您以非根用户身份运行,您可以使用docker run--group-add选项向有效用户添加(数字)gid;它不需要在/etc/group文件中特别提及。在Linux主机上运行:

docker run --group-add $(stat -c '%g' /var/run/docker.sock) ...

您通常不会在Dockerfile中安装sudo(它对非交互式程序不太适用,由于容器的短暂性,您通常不会在交互式shell中做很多工作,并且您总是可以docker exec-u 0虽然安装一些非root用户通常被认为是最佳实践。您可以将Dockerfile减少到

FROM node:8
RUN apt-get update
# Trying to use the host's `docker` binary may not work well
RUN apt-get install -y docker.io
# Install the single node tool you need
RUN npm install -g gulp
# Get your non-root user
RUN adduser myusername
# Normal Dockerfile bits
WORKDIR ...
COPY ...
RUN gulp
USER myusername
CMD ["npm", "run", "start"]

(Docker基础映像有几个与Docker最佳实践不匹配的东西,并且似乎没有定期更新;我只是使用标准的节点映像作为基础,并在其上添加您需要的一个构建工具。)

王英彦
2023-03-14

一个快速避免这种情况的方法。将您的用户添加到组中。

sudo gpasswd -a $USER docker

然后设置适当的权限。

sudo setfacl -m user:<your username>:rw /var/run/docker.sock

从那里应该很好。

 类似资料: