Docker容器中运行docker命令
问题
在使用 docker 部署程序的时候,经常需要用到 docker 命令,但是容器内部默认是无法使用 docker 命令的。
解决方案
方法一:
示例:
1 | docker run --privileged \ |
使用 --privileged ,挂载 docker.sock 以及 /usr/bin/docker
此方法安全性较差。
方法二:
A、使用 docker in docker 镜像,不过仍需要挂载 -v /var/run/docker.sock:/var/run/docker.sock
命令: docker run -itd -v /var/run/docker.sock:/var/run/docker.sock --name=docker-cmd --privileged docker
B、使用 dind 标签的docker in docker 镜像,采用--privileged方式,此时操作将在 容器内部进行,不会涉及docker宿主机,不需要挂载 docker.sock;该镜像有完整的docker命令。
注意点: 使用dind作为基础镜像打包程序时可能出现无法运行docker命令问题,进入容器后可以先运行: dockerd & ,之后就可正常使用;
C、使用 dind 标签的docker in docker 镜像,采用Sysbox Runtime(需要另行安装),不需要privileged权限,更安全,但资源配置有要求。
https://github.com/nestybox/sysbox#installing-sysbox
命令示例: docker run --runtime=sysbox-runc --name sysbox-dind -d docker:dind
参考:https://devopscube.com/run-docker-in-docker/
此方法安全性较好,隔离性比较高。