Docker 不在主机挂载卷中保存数据

Docker doesn't save data in host mounted volume

我正在尝试在 docker 容器中使用 Docker 工具箱在 Windows 7 上启动 jenkins。

我运行

docker run --name jenkins -p 8080:8080 -p 50000:50000 -v "//C/Users/myname/.jenkins:/var/jenkins_home" jenkins  

jenkins 启动良好,但在 C:/Users/myname/.jenkins 下没有创建任何内容。 我已经创建了文件夹,但它仍然是空的。

当我现在停止并移除容器并再次启动它时,jenkins 已经失去了我之前所做的一切。

我做错了什么?

使用 Docker 工具箱,docker 图像实际上不会 运行 'on' 您的 windows 机器,而是在创建的虚拟机上你的 windows 机器。

windows 上的 Docker 工具箱似乎主机安装的卷确实有一些注意事项。参见示例:

也许这里有一些提示可以帮助您使其正常工作。


如果您确实希望数据在容器之间持久保存,即使在删除 jenkins 容器之后,您也可以为 jenkins homedir 使用数据卷。在那种情况下,您将按以下方式启动 jenkins:

docker run --name jenkins -p 8080:8080 -p 50000:50000 -v "/var/jenkins_home" jenkins

这基本上为 /var/jenkins_home 目录创建了一个单独的 docker 容器,允许您删除/升级/等 jenkins 容器而不影响您的数据。

但请确保您了解这里发生的事情。读: https://docs.docker.com/engine/tutorials/dockervolumes/

jenkins docker-image 文档中也提到了这一点: https://hub.docker.com/_/jenkins/


或者:是否可以在需要时仅 'stop' 和 'restart' 容器? - 在这种情况下,您不需要主机挂载目录。在这种情况下,只需省略 -v 选项。这确实使备份数据或使用更新的 jenkins 图像变得困难。

我没能使用 docker 控制台做到这一点,但是可以使用 Docker 工具箱中的 Kitematic。 在卷选项卡中,您可以将本地文件夹作为卷添加到容器中。 Jenkins 文件按预期出现在本地文件夹中。