热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在unix:///var/run/docker.sock中拒绝Docker守护程序套接字的权限

如何解决《在unix:///var/run/docker.sock中拒绝Docker守护程序套接字的权限》经验,为你挑选了2个好方法。

我有这个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的Docker守护程序套接字时获得权限被拒绝:///var/run/docker.sock:获取http://%2Fvar%2Frun%2Fdocker.sock/v1.38/images/json:拨打unix /var/run/docker.sock:connect:权限被拒绝

如何从这里创建docker镜像chekote/gulp:latest我可以在其中使用docker而不会出现错误?

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



1> R J..:

避免这种情况的快速方法.将您的用户添加到该组.

sudo gpasswd -a $USER docker

然后设置适当的权限.

sudo setfacl -m user::rw /var/run/docker.sock

从那里应该是好的.


这样可以节省一天!
应该在顶部,辉煌!

2> David Maze..:

权限匹配仅在数字用户ID和组ID上发生。如果套接字文件的模式为0660,并由用户ID 0和组ID 32拥有,并且您以用户ID 1000和组ID 1000和16的用户身份对其进行调用,则是否有一个/etc/group文件名为gid 32 docker另一个名字叫16。数字编号不同,您无法访问该文件。另外,由于Docker组的实际数字差异在不同的系统中会有所不同,因此您无法将其纳入Dockerfile中。

许多Docker映像只是以root身份运行;如果这样做,则无论其权限如何,他们都可以访问绑定安装的Docker套接字文件。

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

docker run --group-add $(getent group docker | cut -d: -f3) ...

通常,您不会安装sudo在Dockerfile中(不适用于非交互式程序,由于容器的短暂性质,您通常不会在交互式shell中做很多事情,并且总docker exec -u 0可以获取root用户权限)外壳程序),虽然通常认为最佳做法是安装一些非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"]

(那泊坞窗基本图像有一 对夫妇 的 事情是真的不匹配泊坞窗的最佳做法,似乎并没有被定期更新;我只是使用标准的node图像为基础,并添加你需要在一个构建工具顶部)。


推荐阅读
author-avatar
此女人不嫁_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有