我有这个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 .
最后由script
以如下方式运行:
#!/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
我得到这个错误:
尝试连接到unix:///var/run/docker.sock上的Docker守护进程套接字时权限被拒绝:获取http://%2Fvar%2Frun%2Fdocker.sock/v1.38/images/json:拨号unix /var/run/docker。sock:连接:权限被拒绝
如何从chekote/gulp:latest
创建docker映像,这样我就可以在其中使用docker而不会出现错误?
又或许这个错误是因为错误的Docker运行命令?
5条答案
按热度按时间4jb9z9bj1#
一个快速的方法来避免这种情况。添加您的用户到组。
然后设置适当的权限。
从那里应该是好的。
nqwrtyyt2#
权限匹配只发生在 numeric 用户ID和组ID上。如果套接字文件的模式为0660,并由用户ID 0和组ID 32拥有,并且您以用户ID为1000、组ID为1000和16的用户身份调用它,则即使一个
/etc/group
文件将gid 32命名为docker
,另一个将gid 16命名为相同的名称,也没有关系;数字gid是不同的,你不能访问文件。而且,由于Docker组的实际数字gid在不同的系统中会有所不同,这不是你可以烘焙到Docker文件中的东西。许多Docker映像只是以root身份运行;如果这样做,则无论绑定挂载的Docker套接字文件的权限如何,他们都可以访问该文件。
如果您以非root用户身份运行,则可以使用
docker run --group-add
选项为有效用户添加一个(数字)gid;不需要在/etc/groups
文件中特别提及。通常不会在Dockerfile中安装
sudo
(对于非交互式程序来说,它不太好用,因为容器的短暂性,您通常不会在交互式shell中执行很多操作,而且您总是可以通过docker exec -u 0
来获得根shell),尽管安装一些非根用户通常被认为是最佳实践。(That Docker base image有一些东西与Docker的最佳实践并不匹配,而且似乎没有定期更新;我只使用标准的
node
映像作为基础,并在其上添加您需要的一个构建工具。)pbossiut3#
打开终端并键入以下命令
告诉我结果...
iyfjxgzm4#
您需要在docker运行命令中使用--privileged标志。
顺便说一下,你可以在Docker中使用Docker,这类用例的图像来自Docker。
https://asciinema.org/a/24707
https://hub.docker.com/_/docker/
b4qexyjb5#
该错误与docker pull或docker image子命令无关,而是您需要以对docker套接字具有写访问权限的用户身份(例如,作为root用户、使用sudo或作为docker组成员)调用docker命令。