docker - 从 docker 运行 docker 时权限被拒绝 /var/run/docker.sock
问题描述
我有一个容器,我需要在其中使用另一个容器(第一个容器包含我的构建环境,一些项目是通过创建容器来构建的)。我阅读了有关避免使用 docker-in-docker 的信息,并遵循了此处的建议:https ://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/所以我像这样运行容器:
docker run -v /var/run/docker.sock:/var/run/docker.sock -ti 6519bf891fee bash
这就是我得到的,试图在容器内运行 docker hello-world:
root@345cf0f934c3:/# docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
此外,尝试cat /var/run/docker.sock
会导致:
cat: /var/run/docker.sock: No such device or address
虽然ls -l /var/run/docker.sock
:
srw-rw----. 1 root root 0 Nov 29 11:58 /var/run/docker.sock
我在主机和容器中都以 root 身份运行,并且已将 docker 用户添加到两者中的 sudoers 组。例如在容器内:
srw-rw----. 1 root root 0 Nov 29 08:58 /var/run/docker.sock
sudo:x:27:build,docker
解决方案
答案是:运行 docker--privileged=true
推荐阅读
- .net - WPF TabControl - 以编程方式模板和创建选项卡
- html - 悬停在引导模式图像中不起作用
- flutter - Flutter 文档协作
- django - 无法访问/找到静态图像的文件夹
- laravel - 没有要备份的文件 spatie/laravel-backup
- reactjs - Google Maps Places API - 如何获取地名?
- python - 根据其父子文件夹名称重命名每个子文件夹中的每个 csv 文件
- r - 使用 transition_reveal() 不会产生任何结果
- c# - 如何将行动态添加到 UWP 中的 Datagrid?
- javascript - 如何将 Prettier 集成到可共享的 ESLint 配置中?