如何在 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命令。

相关推荐
rain_in_spring几秒前
十、项目:营销中心
linux·运维·服务器
csdn_life182 分钟前
# Debian 10 升级到 Debian 13 指南
运维·debian·php
U盘失踪了3 分钟前
Debian 使用 Xfce 桌面
linux·运维
k7Cx7e3 分钟前
Debian安装 curl 时提示插入 DVD 光盘
运维·windows·debian
云飞云共享云桌面4 分钟前
广东某智能装备工厂8人共享一台服务器
大数据·运维·服务器·人工智能·3d·自动化·电脑
鹓于4 分钟前
OmniParser视觉鼠标自动化实战
运维·自动化·计算机外设
北冥湖畔的燕雀4 分钟前
Linux Shell开发实战:从零打造命令行工具
linux·运维·服务器
!沧海@一粟!7 分钟前
Esxi主机iDrac密码与IP重置指南
运维·服务器
原来是猿9 分钟前
Linux - 基础IO【中】
linux·运维·服务器
Xzq2105099 分钟前
网络编程套接字(UDP)
运维·服务器·网络