我有一个用例,我偶尔想从我的主机复制一个文件到Vagrant客户机。
我不想这样做通过传统的供应(木偶/厨师),因为这往往是一次性的-我只是想快速添加到我的Vagrantfile。
我不想共享整个目录,可能是因为我想覆盖现有文件,而不破坏客户机上的整个目录。
当我想要做的只是复制一个文件时,编写一个shell配置脚本并处理潜在的转义似乎有点过分。
那么,将单个文件从主机复制到客户机的最简单方法是什么?
我有一个用例,我偶尔想从我的主机复制一个文件到Vagrant客户机。
我不想这样做通过传统的供应(木偶/厨师),因为这往往是一次性的-我只是想快速添加到我的Vagrantfile。
我不想共享整个目录,可能是因为我想覆盖现有文件,而不破坏客户机上的整个目录。
当我想要做的只是复制一个文件时,编写一个shell配置脚本并处理潜在的转义似乎有点过分。
那么,将单个文件从主机复制到客户机的最简单方法是什么?
当前回答
如果出于某些原因,你没有被允许使用
vagrant plugin install vagrant-scp
还有另一种方法:
首先在你的vagrantproject上流浪,然后在终端上写:
vagrant ssh-config
你会有关于虚拟机的“主机名”和“端口”的信息。
在某些情况下,您的项目中可能有一些虚拟机。因此,只需找到您的主机(通常,这个VM的端口为2222),不要关注其他机器的信息。
编写命令来复制:
scp -P xxPortxx /Users/where/is/your/file.txt vagrant@xxHostNamexx:/home/vagrant
在这种情况下,你必须设置一个流浪密码: 默认是"vagrant"
在那之后,如果你查看虚拟机中的文件:
vagrant ssh xxVirtualMachineNamexx
pwd
ls
在虚拟机目录中会有“file.txt”文件
其他回答
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上测试。
我最终做的是将文件保存在我的vagrant目录中(自动挂载为/vagrant/),并使用shell供应程序复制它:
command = "cp #{File.join('/vagrant/', path_within_repo)} #{remote_file}"
config.vm.provision :shell, :inline => command
如果你“cd ..”足够多的时间,你会发现vagrant文件夹,其中包含你所有的主机文件和文件夹
除了使用shell提供程序复制文件外,还可以使用Vagrant文件提供程序。
提供者名称:“file” 文件提供程序允许您将文件从主机上传到客户计算机。
Vagrant.configure("2") do |config|
# ... other configuration
config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end
如果有人想将文件从windows主机传输到vagrant,那么这个解决方案对我来说是有效的。
1. Make sure to install **winscp** on your windows system
2. run **vagrant up** command
3. run **vagrant ssh-config** command and note down below details
4. Enter Hostname, Port, Username: vagrant, Password: vagrant in winscp and select **SCP**, file protocol
5. In most cases, hostname: 127.0.0.1, port: 2222, username: vagrant, password: vagrant.
您应该能够在您的流浪机器中看到目录。