如何为非root用户授予Docker DIND的docker.sock访问权限?
问题描述
现有相关问题及解答均已不再适用,原解决方案失效的具体情况如下:
- 容器运行时
/var/run/docker.sock不存在,挂载该路径会自动生成目录,导致DIND启动失败;强制绑定挂载也会因同样原因报错。 - 挂载
/var/run可正常运行,但socket权限为root:root,非root容器无法访问(触发标准Docker权限拒绝错误)。修改gid的方案同样无效,因为无法在myapp容器内读取DIND的docker组gid。
应用容器以root身份启动,可在docker-entrypoint.sh中以root权限执行脚本修改socket权限,但实际需要访问DIND的应用是通过su-exec以非root用户运行的。
docker-compose.yml 片段
--- myapp-docker: # image: mycorp/myapp-docker:dind-rootless # 尝试使用rootless dind镜像但同样失败 image: docker:20.10.17-dind container_name: myapp-docker privileged: true restart: always volumes: - ./data/docker/run:/var/run/ - ./data/docker/lib:/var/lib/docker - ./data/docker/certs:/certs environment: DOCKER_TLS_CERTDIR: /certs networks: myappnet: ipv4_address: 10.5.0.7
我已将./data/docker/run和./data/docker/lib挂载到myapp容器中。
曾考虑查看Kasm源码,了解其如何使用rootless dind(若确实采用无root访问机制),但尚未实施。
编辑:正在将应用转换为使用Docker API,希望能获得相关帮助。
内容的提问来源于stack exchange,提问作者vaughngx4
相关产品推荐
相关产品推荐

