gpt4 book ai didi

linux - 由于文件权限,无法访问 Docker 套接字

转载 作者:行者123 更新时间:2023-12-04 18:48:15 25 4
gpt4 key购买 nike

我正在尝试在 Docker 容器中模拟开发环境。作为这项工作的一部分,我希望 Docker 容器具有与主机相同的用户和组。这可以通过在运行时挂载主机的用户和组配置文件来实现docker run (请参阅底部的完整 docker run 命令)。
当您启动此容器时,您以与主机上相同的用户和组登录到容器(指定标志 --user $(id -u):$(id -g) )。假设用户是 ubuntu该组也是ubuntu .
现在,我还希望能够从容器中运行 Docker 命令。我尝试通过挂载 docker 套接字文件来执行此操作,以便 Docker 容器中的 Docker 客户端可以与主机上的 Docker 守护程序通信。
在主机上,登录用户已添加到组 docker并且设置了 docker 套接字文件权限,以便组中的任何用户 docker可以发出 docker 命令:

ubuntu@laptop:$ ls -l /var/run/docker.sock
srw-rw---- 1 root docker 0 Feb 8 09:45 /var/run/docker.sock

ubuntu@laptop:$ docker images # (no sudo required)
REPOSITORY TAG IMAGE ID CREATED SIZE
dind latest 65b727c75899 42 minutes ago 611MB
postgres 9.6-bullseye 2266d156fa6a 5 weeks ago 239MB
ubuntu 20.04 ba6acccedd29 3 months ago 72.8MB
但是,当我运行像 docker images 这样的 docker 命令时从容器内部,我得到一个文件权限错误:
ubuntu@b5bb183641e8:$ docker images
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json: dial unix /var/run/docker.sock: connect: permission denied
如果我在 Docker 容器中以 root 身份(或使用 sudo )运行上述命令,则上述命令将正确运行。
发生这种情况是因为用户 ubuntu能够读/写主机上的 docker 套接字,但不能在容器上。如果我已将所有相关文件权限配置文件从主机安装到容器上,我不明白为什么会出现这种情况。我希望容器上的行为与主机上的行为相同。
以供引用,
容器的图像(标记为 `dind:latest)由以下 Dockefile 定义
FROM ubuntu:20.04

RUN apt update && apt -y install sudo docker.io

CMD /bin/bash
运行安装了所有相关文件的 docker 容器:
$ docker run \
> --user $(id -u):$(id -g) \
> -v /etc/group:/etc/group:ro \
> -v /etc/gshadow:/etc/gshadow:ro \
> -v /etc/passwd:/etc/passwd:ro \
> -v /etc/shadow:/etc/shadow:ro \
> -v /etc/sudoers.d:/etc/sudoers.d:ro \
> -v /var/run/docker.sock:/var/run/docker.sock \
> dind:latest

最佳答案

当您使用此选项指定组时:

--user $(id -u):$(id -g)
这是分配给用户的唯一组,它忽略 /etc/group 中指定的所有其他内容.通常您可以只指定用户,组 ID 将从/etc/passwd 和/etc/group 配置。那看起来像:
--user $(id -u)
不幸的是,我相信这是在安装卷之前根据镜像中的文件完成的。所以你需要手动添加额外的组 --group-add ,对于 docker 套接字,您需要 docker 组(您可能需要用 gid 替换它):
--group-add docker

关于linux - 由于文件权限,无法访问 Docker 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71056542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com