我有一个用例,我偶尔想从我的主机复制一个文件到Vagrant客户机。

我不想这样做通过传统的供应(木偶/厨师),因为这往往是一次性的-我只是想快速添加到我的Vagrantfile。

我不想共享整个目录,可能是因为我想覆盖现有文件,而不破坏客户机上的整个目录。

当我想要做的只是复制一个文件时,编写一个shell配置脚本并处理潜在的转义似乎有点过分。

那么,将单个文件从主机复制到客户机的最简单方法是什么?


当前回答

转到Vagrantfile所在的目录 然后,编辑你的Vagrantfile并添加以下内容:

config.vm.synced_folder ".", "/vagrant", :mount_options => ['dmode=774','fmode=775']

"."表示您在主机上当前所在的目录 “/vagrant”是指客机(vagrant机)上的“/home/vagrant”。

复制你需要发送到客户机的文件到你的Vagrantfile文件夹 然后打开Git Bash, cd到你的Vagrantfile所在的目录,输入:

vagrant scp config.json XXXXXXX:/home/vagrant/

其中XXXXXXX是您的虚拟机名称。您可以通过运行命令获取虚拟机名称

vagrant global-status

其他回答

我最终做的是将文件保存在我的vagrant目录中(自动挂载为/vagrant/),并使用shell供应程序复制它:

command = "cp #{File.join('/vagrant/', path_within_repo)} #{remote_file}"
config.vm.provision :shell, :inline => command

您可以在~/.ssh/config中添加条目:

Host vagrant
    User vagrant
    HostName localhost
    Port 2222
    IdentityFile /home/user_name/.vagrant.d/insecure_private_key

和simplescp文件vagrant:/path/。可以使用vagrant ssh-config命令查找身份文件的路径。

Vagrant提供了一种通过ssh执行命令而不是登录的方法,因此对于Linux主机和客户,您可以使用:

从主人到客人:

Cat ~/file_on_host.txt | vagrant SSH -c ' Cat - > ~/file_on_guest.txt'

从嘉宾到主持人:

Vagrant SSH -c 'cat ~/file_on_guest.txt' > ~/file_on_host.txt

不需要插件或客户重新加载。如果你和Vagrantfile不在同一个目录,请确保提供vagrant box ID给'vagrant ssh'。在Vagrant v1.8.1上测试。

其实有一个更简单的解决方案。看到https://gist.github.com/colindean/5213685/评论- 882885:

"请注意,除非您出于某种原因特别想要scp,否则将文件从主机传输到VM的最简单方法是将它们放在与Vagrantfile相同的目录中-该目录会自动挂载在VM的/vagrant下,因此您可以直接从VM复制或使用它们。"

除了使用shell提供程序复制文件外,还可以使用Vagrant文件提供程序。

提供者名称:“file” 文件提供程序允许您将文件从主机上传到客户计算机。

Vagrant.configure("2") do |config|
  # ... other configuration

  config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end