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/
此方法安全性较好,隔离性比较高。