【问题标题】:Understanding docker -v command了解 docker -v 命令
【发布时间】:2015-11-23 01:00:39
【问题描述】:

我刚刚在 Youtube 上浏览 this tutorial,试图了解 -v 命令的用法。

为什么作者使用-v 命令?他使用命令,如下所示:

docker run -v /var/lib/mysql --name=my_datastore -d busybox echo "my datastore"

现在我在一定程度上理解了上面的命令:

  • --name=my_datastore 给容器一个特定的名称。
  • -d busybox 基于 busybox 映像以分离模式启动容器。

命令执行后,下面的行会回显到控制台。

my datastore 

现在,我不明白的部分如下:

-v /var/lib/mysql

这里为什么使用-v命令,为什么指定路径/var/lib/mysql

我很难理解为什么要使用上述行以及在什么情况下使用。谁能解释一下?

【问题讨论】:

  • 如果你这样做docker run --help,你会得到-v, --volume=[] Bind mount a volume
  • @user2915097 我不明白它的使用背景,所以我问了这个问题,你能解释一下……一步一步给我解释一下,发生了什么,我很难说块在一起!
  • 通常我们把源和目标放在一起,比如-v $HOME/.rainbow_oauth:/root/.rainbow_oaut(这是blog.jessfraz.com/post/docker-containers-on-the-desktop的例子)

标签: docker docker-volume


【解决方案1】:

docker run-v(或--volume)参数用于在容器内创建与容器文件系统的其余部分分开的存储空间。命令有两种形式。

当给定一个参数时,例如-v /var/lib/mysql,这会从 Docker 分配空间并将其安装在给定位置。这主要是一种从 Docker 分配存储的方式,它与您的服务容器不同。例如,您可能想要运行更新版本的数据库应用程序,这涉及拆除现有的 MySQL 容器并启动一个新容器。您希望您的 数据 在此过程中继续存在,因此您将其存储在数据库容器可以访问的卷中。

当给定两个参数(host_path:container_path)时,比如-v /data/mysql:/var/lib/mysql,这会将指定目录挂载到容器内主机上的指定路径(准确地说,这也可以用来暴露主机files 在容器内;例如 -v /etc/localtime:/etc/localtime 将使主机上的 /etc/localtime 在容器内作为 /etc/localtime 可用)。这是一种向容器提供信息的方式,或者为容器提供一种使主机可以访问文件的方式。

如果容器有可用的卷,可以通过使用-v 命令行参数或通过Dockerfile 中的VOLUME 指令,则可以使用--volumes-from 选项从另一个容器访问这些卷:

docker run --volumes-from my_datastore ...

这将使源容器中定义的任何卷在您以--volumes-from 开头的容器中可用。

Docker Volumes 文档中对此进行了更详细的讨论。

【讨论】:

  • 最后一个文档链接现在失效了
  • 这个答案已经有点过时了。 -v 的语法略有不同,建议新用户使用 --mount 选项。
  • 新语法是什么?
  • 我已更新链接以指向当前文档。我不认为-v 的语法有很大的变化(有新的修饰符可以添加到最后,但基本语法是一样的)。如果您点击链接,则会讨论 -v--mount
  • -v /etc:/node/etc:ro 中的:ro 是什么? @larsks
猜你喜欢
  • 2015-01-18
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多