【发布时间】: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