Docker——容器内部执行宿主机的docker命令

现在有一个需求是在容器内部使用docker命令,但试了一下报命令不存在

解决办法: 把docker相关的命令和依赖使用-v挂载到容器

docker@box:~$ docker run -it -d  \
> --restart=always -u root \
> -v /usr/bin/docker:/usr/bin/docker \
> -v /var/run/docker.sock:/var/run/docker.sock  demo1:1.0
762d4583d2200bc6df74ff3a3f85ebe3a329a5be0dc1552d8b3ff8dc859e893f

测试成功

 参数说明:

--restart=always #Docker重启后该容器也为随之重启
-u root          
#以root的身份去运行镜像(避免在容器中调用Docker命令没有权限)
#最好使用docker用户去运行
-v /usr/bin/docker:/usr/bin/docker
#将宿主机的docker命令挂载到容器中
#可以使用which docker命令查看具体位置
#或者把挂载的参数改为: -v $(which docker):/usr/bin/docker
-v /var/run/docker.sock:/var/run/docker.sock
#容器中的进程可以通过它与Docker守护进程进行通信
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
#libltdl.so.7是Docker命令执行所依赖的函数库
#容器中library的默认目录是 /usr/lib/x86_64-linux-gnu/
#把宿主机的libltdl.so.7 函数库挂载到该目录即可
#可以通过whereis libltdl.so.7命令查看具体位置
#centos7位置/usr/lib64/libltdl.so.7
#ubuntu位置/usr/lib/x86_64-linux-gnu/libltdl.so.7
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker容器中的文件映射到宿主上是一个非常常见的需求,这通常用于从宿主上的本地文件系统读取和持久化容器中的数据。因此,Docker提供了一种简单但有效的方式——被称为容器卷的功能进行文件映射。 容器卷是指一个目录,它被设计为可以与宿主文件系统中的某个目录共享,以便在容器中持久化数据。Docker支持两种类型的卷:命名卷和匿名卷。 1. 命名卷:命名卷是创建的卷,它具有一个显式的名称,可以在容器启动时或通过命令行创建。对于这些类型的卷,我们需要在运行容器时通过-v选项提供宿主容器文件系统之间的映射路径。 假设我们想将Docker容器数据映射到当前工作目录的"data"文件夹中,则使用下面的命令运行容器docker run -it -v "$(pwd)/data:/data" image_name 这将会将容器的“/data”文件夹映射到本地计算上当前工作目录下的“data”文件夹。可以将此路径替换为任何路径,以满足我们的需求。 2. 匿名卷:另一方面,匿名卷不需要指定卷的名字,在容器运行期间自动生成,而且通常用于存储容器中的临时数据。可以通过-Dockerfile中的VOLUME指令创建匿名卷。 在Dockerfile中,可以使用以下命令创建匿名卷: VOLUME ["/data"] 这将创建一个名为“/data”的卷,该卷可以在容器运行期间自动生成。无需指定卷的名称和路径,Docker会自动处理它。 总而言之,通过将Docker文件夹映射到宿主上,我们可以使我们的容器拥有与宿主相同的数据/文件,而不必每次重新安装容器。 通过使用卷,可以确保容器中的数据永久保存并且可供下次使用,避免数据丢失的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值