如何在 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命令:就可以正常使用了。

实例:我想在code-server中可以执行docker宿主机的命令,我的安装如下:

复制代码
docker run -it --name code-server -p 8080:8080 \
  -v "/var/run/docker.sock:/var/run/docker.sock" \
  -v "/usr/bin/docker:/usr/bin/docker" \
  -v "/home/docker/code-server/.config:/root/.config" \
  -v "/home/docker/code-server/.local:/root/.local" \
  -v "/home/docker:/home/docker" \
  -u "$(id -u):$(id -g)" \
  -e "DOCKER_USER=$USER" \
codercom/code-server:latest

方法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命令。

相关推荐
Doraemomo13 分钟前
Linux内核驱动开发——中断与定时器
linux·运维·驱动开发
2301_8084143824 分钟前
Linux中动静态库的理解
linux·运维·服务器
誰能久伴不乏36 分钟前
保姆级 Docker 入门教程
docker·容器·eureka
分布式存储与RustFS1 小时前
模型 checkpoint 放对象存储:分片上传、断点续传与残留清理
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
一条破秋裤2 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
FED_AF4 小时前
Linux运维“邪修”功法之通配符
linux·运维
YOLO数据集集合4 小时前
风机叶片表面损伤检测数据集 | 风机叶片 表面损伤 污渍检测 无人机巡检 风电运维9119期
运维·人工智能·计算机视觉·目标跟踪·无人机·智慧城市·电力巡检
j7~5 小时前
【Linux网络编程】四十七.《Linux IO 模型详解:阻塞 IO、非阻塞 IO 与 IO 多路转接(select)》
linux·运维·网络·select·非阻塞io·阻塞io·i/o多路连接
分布式存储与RustFS5 小时前
用RustFS给Harbor当S3存储后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
泡海椒5 小时前
趋势分析报表:jquick-pdf折线图PDF生成实战
java·大数据·运维·服务器·前端·pdf