如何在 docker 容器内部运行 docker命令

Posted JasonLiu1919

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 docker 容器内部运行 docker命令相关的知识,希望对你有一定的参考价值。

背景

有些场景在容器内部需要调用 docker 命令。为此,本文梳理2种可以在容器内部执行docker命令的方法。

方法1:基于 docker.sock

/var/run/docker.sock是默认的Unix socket(套接字),socket是同一机器中进程间通讯的一种方式。Docker daemon 默认监听docker.sock。比如可以使用下述命令获取 docker engine 的版本信息,以下在宿主机上执行:

那么如何在 docker 内运行 docker呢?只需要将宿主机的 docker 命令和 套接子映射到容器内部即可。

docker run --privileged --name='test_triton_jason' -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -itd your-images bash

进入到容器内部可以正常运行docker命令:

方法2:使用 dind

该方法其实是在container内部创建一个子 container,除非真的是需要在container内部构建containers 和 images,否则一般建议使用方法1。
创建一个名为dind-test的容器:

docker run --privileged -d --name dind-test docker:dind

进入容器:

docker exec -it dind-test /bin/sh

在子容器内运行:

docker run --privileged --name='test_triton_jason_v3' --net=host --ipc=host -v /data/home/:/home -w /home -itd -image bash

可以看出,此时在容器内部可以执行 docker命令。

以上是关于如何在 docker 容器内部运行 docker命令的主要内容,如果未能解决你的问题,请参考以下文章

如何进入到Docker容器内部

docker可复用容器

Docker 如何安全地进入到容器内部

如何从 Docker 容器内部访问在 WSL2 上运行的服务?

从 docker 内部运行 docker 可以吗?

如何启用从 Docker 容器内部启动的 Spark-Mesos 作业?