我有一个用例,我偶尔想从我的主机复制一个文件到Vagrant客户机。
我不想这样做通过传统的供应(木偶/厨师),因为这往往是一次性的-我只是想快速添加到我的Vagrantfile。
我不想共享整个目录,可能是因为我想覆盖现有文件,而不破坏客户机上的整个目录。
当我想要做的只是复制一个文件时,编写一个shell配置脚本并处理潜在的转义似乎有点过分。
那么,将单个文件从主机复制到客户机的最简单方法是什么?
我有一个用例,我偶尔想从我的主机复制一个文件到Vagrant客户机。
我不想这样做通过传统的供应(木偶/厨师),因为这往往是一次性的-我只是想快速添加到我的Vagrantfile。
我不想共享整个目录,可能是因为我想覆盖现有文件,而不破坏客户机上的整个目录。
当我想要做的只是复制一个文件时,编写一个shell配置脚本并处理潜在的转义似乎有点过分。
那么,将单个文件从主机复制到客户机的最简单方法是什么?
当前回答
其实有一个更简单的解决方案。看到https://gist.github.com/colindean/5213685/评论- 882885:
"请注意,除非您出于某种原因特别想要scp,否则将文件从主机传输到VM的最简单方法是将它们放在与Vagrantfile相同的目录中-该目录会自动挂载在VM的/vagrant下,因此您可以直接从VM复制或使用它们。"
其他回答
我最终做的是将文件保存在我的vagrant目录中(自动挂载为/vagrant/),并使用shell供应程序复制它:
command = "cp #{File.join('/vagrant/', path_within_repo)} #{remote_file}"
config.vm.provision :shell, :inline => command
对我来说最好的办法是把文件/目录(要复制)写到流浪文件目录,现在任何文件都可以在路径/vagrant中找到。
就是这样,不需要scp或任何其他方法,
类似地,您可以通过粘贴/vagrant目录从虚拟机复制任何文件到主机。
其实有一个更简单的解决方案。看到https://gist.github.com/colindean/5213685/评论- 882885:
"请注意,除非您出于某种原因特别想要scp,否则将文件从主机传输到VM的最简单方法是将它们放在与Vagrantfile相同的目录中-该目录会自动挂载在VM的/vagrant下,因此您可以直接从VM复制或使用它们。"
如果您的目录中不能包含这些文件,则可以在主机的脚本文件中运行此代码。
#!/bin/sh
OPTIONS=`vagrant ssh-config | awk -v ORS=' ' '{print "-o " $1 "=" $2}'`
scp ${OPTIONS} /File/To/Copy vagrant@YourServer:/Where/To/Put/File
在此设置中,您只需要将/File/ to /Copy更改为您想要复制的文件或文件,然后/Where/ to /Put/File是您希望将文件复制到的虚拟机上的位置。
如果您创建了这个文件并将其命名为copyToServer.sh,那么您可以运行sh命令来推送这些文件。
sh ./copyToServer.sh
最后需要注意的是,您不能将此代码作为配置程序运行,因为它运行在Guest服务器上,而此代码则从主机运行。
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上测试。