有没有一种方法可以启动一个Docker容器并从主机挂载卷?

4
场景: 我有一个主机,上面运行着Docker守护进程和可用的Docker客户端和套接字。我有一个Docker容器从主机启动,内部加载了一个Docker套接字。它还从主机加载了一个装载了Docker客户端的挂载点。因此,我可以使用上述机制在这个Docker容器内随意发出Docker命令。 需求: 我想要从这个Docker容器内部启动另一个Docker容器; 换句话说,我想要从另一个平级Docker容器启动一个“兄弟姐妹”Docker容器。 问题: 当我想要将主机文件系统中的文件挂载到另一个从另一个Docker平级容器中启动的“兄弟姐妹”容器时,就会出现问题。它是一个问题,因为在发出docker run命令时,Docker守护进程实际上正在监视主机文件系统。因此,我需要从试图启动另一个平级Docker容器的Docker容器内访问主机文件系统。
换句话说,我需要类似以下内容的东西:
# running from within another docker container: 
docker run --name another_sibling \
  -v {DockerGetHostPath: path_to_host_file}:path_inside_the_sibling \
  bash -c 'some_exciting_command'

有没有一种方法可以实现这个?提前谢谢。
2个回答

1
路径始终在主机上,无论您是在远程运行客户端(或容器)。

请记住:Docker客户端只是一个REST客户端,“-v”始终涉及守护程序的文件系统。


1
我不明白你所说的“路径始终在主机上”的意思。Docker容器具有与主机不同的文件系统,因此在两个方面上路径实际上是不同的。 - ninrod
我想要从Docker容器中执行我的脚本,但由于守护进程实际上是在主机上运行的,所以我需要将挂载点扩展到主机的等效真实路径。也许我在描述问题时遇到了困难。 - ninrod
我只想强调这是一个很棒和开阔眼界的答案。我一直在努力构建一个“重新启动同级容器”的Webhook,但我没有意识到路径是在Docker主机上解析的,而不是在客户端上。谢谢! - Juriy

1

有多种方法可以实现这一点。

  1. 您始终可以确保每个容器都挂载正确的主机目录
  2. 您可以使用 --volumes-from,例如:

    docker run -it --volumes-from=keen_sanderson --entrypoint=/bin/bash debian

    --volumes-from 从指定的容器挂载卷

  3. 您可以使用卷

create and managa volumes screenshot


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接