首页 > 解决方案 > cd 进入 docker 创建的卷

问题描述

我是码头工人的新手。从一本名为 Learn Fundamentals of Docker 18.x From Packt Publishing 的书中学习它。在 Docker Volume 一章中,作者使用 docker-machine 创建了一个 vm,然后创建了一个名为 my-data 的卷。我在第一个终端窗口中执行了如下命令:

ssh 进入默认 docker-machine 并通过将自己提升到 sudo 创建 my-data 卷和 cd 进入其中

然后作者使用 -v 命令创建了一个挂载该卷的容器。我在第二个终端窗口中执行了如下命令):

卷挂载并创建了一个 data.txt 文件

当我尝试在我的第一个终端窗口中列出该卷中的文件时,我什么也得不到。

所以我的理解是

  1. 在 docker 中创建卷。
  2. 将卷安装在容器中。
  3. 创建一些数据。
  4. 退出容器。并且数据将存在。

我还注意到 docker volume inspect my-data 提供了不同的挂载点:

第一个终端窗口中的挂载点 第二个终端窗口中的挂载点

据我所知,它们是不同的卷,对吧?

但我没有在卷中看到任何数据。我的理解正确吗?任何人都可以向我解释 docker 中的卷是如何工作的吗?

另外我想知道如何从我的 Mac 终端导航到这个位置?

提前致谢。

标签: docker

解决方案


您正在运行docker-machine它实际上在安装了 docker 守护程序的主机上创建了一个虚拟机。当您在那里运行时,它会在 vmdocker volume create中创建卷。我怀疑您可能是从 docker-machine 外部运行 docker 命令,但您已经在 docker-machine 中创建了卷,这就是它们看起来是不同卷的原因。

理想情况下,您希望将主机配置为在执行任何 docker 命令时与 docker-machine 对话。从文档

 $ docker-machine env default
 export DOCKER_TLS_VERIFY="1"
 export DOCKER_HOST="tcp://172.16.62.130:2376"
 export DOCKER_CERT_PATH="/Users/<yourusername>/.docker/machine/machines/default"
 export DOCKER_MACHINE_NAME="default"
 # Run this command to configure your shell:
 # eval "$(docker-machine env default)"

否则,您对 docker 卷的理解是正确的。Docker 卷由 docker 创建和管理——这意味着它们的物理位置可以在 docker 主机中更改。但是卷中的数据将始终保留,直到您将其删除。根据文档

创建卷时,它存储在 Docker 主机上的目录中。当您将卷挂载到容器中时,此目录就是挂载到容器中的目录。


推荐阅读