【问题标题】:Synced Folder Error with Docker Provider on Vagrant与 Vagrant 上的 Docker 提供程序同步文件夹错误
【发布时间】:2015-05-14 22:21:05
【问题描述】:

我正在尝试通过 vagrant 中的 docker 提供程序自动构建 Docker 映像。

我的目录如下所示:

Dockerfile external .vagrant Vagrantfile

我的 Dockerfile 的相关部分如下所示:

FROM ubuntu:14.04
MAINTAINER Austin Lopez <austinhlopez@gmail.com>

...

RUN sudo mv /tmp/external/{my_file}.tar .
RUN sudo tar xvf {my_file}.tar

我的 Vagrantfile 看起来像这样:

# -*- mode: ruby -*-                                                                                                                                                                                         
# vi: set ft=ruby :                                                                                                                                                                                          
Vagrant.configure(2) do |config|
  config.vm.synced_folder "./external", "/tmp/external"

  config.ssh.insert_key = false

  config.vm.provider "docker" do |d|
    d.build_dir = "."
    d.force_host_vm = true
  end
end

当我运行 'vagrant up --provider=docker' 时,我看到以下几行:

==>default: Syncing folders to the host VM...
   default: Rsyncing folder: ./external => /var/lib/docker/docker_143...

在我的 docker 文件中,我尝试访问 /tmp/external 目录中的同步文件,但出现以下错误:

cannot stat 'tmp/external/{my_file}': no such file or directory.

如何使用 Docker Provider 同步文件夹?我认为 Dockerfile 在构建 Dockerfile 之前正在运行,但我不确定。我也将 Docker Volumes 视为一种潜在的解决方案,但我认为这是用于从 VM 内而不是从主机安装文件夹。

【问题讨论】:

  • 你的主机上有 rsync 吗?
  • 我有 rsync 并且在不使用 docker 提供程序时已成功同步文件夹。此外,错误发生在自动 docker 构建期间,我使用命令 'vagrant up --provider=docker' 启动。
  • 哦,构建 docker 镜像失败,因为它需要同步文件夹中的内容?我认为同步文件夹只有在构建后才可用于 docker 容器,除非我错过了一些东西。在这种情况下,您的 Dockerfile 中的引用应引用 ./external/ 而不是 /tmp/external/
  • 交换对 ./external 的引用会产生相同的错误。问一个后续问题:是否有人使用 docker 提供程序成功地从 Dockerfile 中引用了同步文件夹中的文件?
  • 添加了上面的 dockerfile。我发现文件夹同步到主机 VM 到 /var/lib/docker/docker_143... 位置而不是 /tmp/external 有点奇怪。为什么该文件夹会同步到 /var/lib/docker 而不是直接同步到主机 VM?

标签: docker vagrant vagrantfile


【解决方案1】:

构建镜像后,Docker 容器可以使用同步的文件夹。

在此之前,Vagrant 只是照常从 Dockerfile 构建您的 Docker 映像,因此 Dockerfile 中的引用应该引用主机,而不是尝试将共享文件夹引用为容器的演示者。

【讨论】:

  • 当您将 docker 提供程序作为虚拟环境运行时,这可能会起作用,但出于兼容性目的,我会强制主机 VM 启动。在我的情况下,主机目录似乎不可用。
猜你喜欢
  • 2019-11-19
  • 2016-08-24
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 2016-06-18
  • 2016-03-21
相关资源
最近更新 更多