我有一个用例,我偶尔会想要将一个文件从我的主机复制到Vagrant客户端.
我不希望通过传统的配置程序(Puppet/Chef)这样做,因为这通常是一次性的 - 我只想快速添加到我的Vagrantfile中.
我不想共享整个目录,可能是因为我想覆盖现有文件而不需要访问guest虚拟机上的整个目录.
编写shell配置脚本并处理潜在的转义似乎有点过分,当我想要做的就是复制文件.
那么,将单个文件从主机复制到guest虚拟机的最简单方法是什么?
Luc*_*zzi 235
既然你要求最简单的方法,我建议使用vagrant-scp.它向vagrant添加了一个scp命令,因此您可以像通常使用scp一样将文件复制到VM.
安装途径:
vagrant plugin install vagrant-scp
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
vagrant scp <some_local_file_or_dir> [vm_name]:<somewhere_on_the_vm>
Run Code Online (Sandbox Code Playgroud)
Eri*_*c P 138
实际上有一个更简单的解决方案.请参阅https://gist.github.com/colindean/5213685/#comment-882885:
"请注意,除非您出于某种原因特别想要scp,否则将文件从主机传输到VM的最简单方法是将它们放在与Vagrantfile相同的目录中 - 该目录自动挂载在VM中的/ vagrant下,这样您可以直接从VM复制或使用它们."
小智 96
您也可以使用Vagrant 文件配置程序,而不是使用shell配置程序来复制文件.
供应商名称:
"file"
文件配置器允许您将文件从主机上载到来宾计算机.
Vagrant.configure("2") do |config|
# ... other configuration
config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end
Run Code Online (Sandbox Code Playgroud)
BMW*_*BMW 95
默认情况下,第一个vagrant实例使用ssh端口为2222,其ip地址为127.0.0.1(您可能需要使用真实虚拟主机调整端口)
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
Run Code Online (Sandbox Code Playgroud)
因此,您可以运行以下命令将本地文件复制到vagrant实例.密码与用户名相同vagrant
.
scp -P 2222 your_file vagrant@127.0.0.1:.
Run Code Online (Sandbox Code Playgroud)
您也可以将文件复制回本地主机.
scp -P 2222 vagrant@127.0.0.1:/PATH/filename .
Run Code Online (Sandbox Code Playgroud)
alf*_*era 53
这是我解决问题的方法:
第1步 - 找到私钥,ssh端口和IP:
root@vivi:/opt/boxes/jessie# vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /root/.vagrant.d/insecure_private_key
IdentitiesOnly yes
LogLevel FATAL
Run Code Online (Sandbox Code Playgroud)
步骤2 - 使用端口和私钥作为scp的参数传输文件:
scp -P 2222 -i /root/.vagrant.d/insecure_private_key \
someFileName.txt vagrant@127.0.0.1:~
Run Code Online (Sandbox Code Playgroud)
我希望它有所帮助,
Lee*_*een 27
我最终做的是将文件保存在我的vagrant目录中(自动挂载为/ vagrant /)并使用shell配置文件将其复制:
command = "cp #{File.join('/vagrant/', path_within_repo)} #{remote_file}"
config.vm.provision :shell, :inline => command
Run Code Online (Sandbox Code Playgroud)
gee*_*dew 18
如果限制在目录中包含文件,则可以从主机中的脚本文件中运行此代码.
#!/bin/sh
OPTIONS=`vagrant ssh-config | awk -v ORS=' ' '{print "-o " $1 "=" $2}'`
scp ${OPTIONS} /File/To/Copy vagrant@YourServer:/Where/To/Put/File
Run Code Online (Sandbox Code Playgroud)
在此设置中,您只需要更改/File/To/Copy
要复制的文件,然后/Where/To/Put/File
是要将文件复制到的VM上的位置.
如果您创建此文件并调用它copyToServer.sh
,则可以运行该sh
命令来推送这些文件.
sh ./copyToServer.sh
Run Code Online (Sandbox Code Playgroud)
最后一点,您不能将此代码作为a provisioner
运行,因为它在Guest服务器上运行,而此代码从Host运行.
jou*_*ell 17
vagrant upload localfile
Run Code Online (Sandbox Code Playgroud)
这将把localfile放在vagrant用户的主目录中
https://www.vagrantup.com/docs/cli/upload.html
use*_*684 10
Vagrant提供了一种通过ssh执行命令而不是登录的方法,因此对于Linux主机和guest虚拟机,您可以使用:
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 ssh'提供流浪盒ID.在Vagrant v1.8.1上测试过.
小智 9
您可以添加条目~/.ssh/config
:
Host vagrant
User vagrant
HostName localhost
Port 2222
IdentityFile /home/user_name/.vagrant.d/insecure_private_key
Run Code Online (Sandbox Code Playgroud)
而且简单scp file vagrant:/path/
.您可以使用该vagrant ssh-config
命令找到标识文件的路径.
小智 8
以上所有答案都可能有效。但下面是对我有用的。我有多个流浪主机:host1,host2。我想将文件从 ~/Desktop/file.sh 复制到主机:host1 我做了:
$vagrant upload ~/Desktop/file.sh host1
Run Code Online (Sandbox Code Playgroud)
这会将 ~/Desktop/file.sh 复制到 /home/xxxx 下,其中 xxx 是 host1 下的流浪用户
小智 7
如果由于某些原因您没有使用许可
vagrant plugin install vagrant-scp
Run Code Online (Sandbox Code Playgroud)
还有另一种方法:
首先流浪你的VagrantProject,然后写在终端:
vagrant ssh-config
Run Code Online (Sandbox Code Playgroud)
您将获得有关虚拟机的"HostName"和"Port"的信息.
在某些情况下,您可以在项目中安装一些虚拟机.因此,只需找到您的主机(通常,此VM具有端口2222),并且不要关注其他机器信息.
编写命令来制作副本:
scp -P xxPortxx /Users/where/is/your/file.txt vagrant@xxHostNamexx:/home/vagrant
Run Code Online (Sandbox Code Playgroud)
在这个陡峭的地方你必须输入一个流浪汉密码:默认情况下它是"流浪汉"
之后,如果您查看虚拟机中的文件:
vagrant ssh xxVirtualMachineNamexx
pwd
ls
Run Code Online (Sandbox Code Playgroud)
您将在虚拟机目录中拥有"file.txt"
小智 5
如果你知道你的 vagrant box 名称,vagrant scp 插件就可以工作。检查 vagrant global-status 它将提供您的盒子名称,然后您可以运行:
Run Code Online (Sandbox Code Playgroud)vagrant global-status
id name provider state directory
------------------------------------------------------------------------
13e680d **default** virtualbox running /home/user
Run Code Online (Sandbox Code Playgroud)
vagrant scp ~/foobar“在我的情况下默认名称”:/home/“用户”/
转到您拥有的目录Vagrantfile
然后,编辑Vagrantfile
并添加以下内容:
config.vm.synced_folder ".", "/vagrant", :mount_options => ['dmode=774','fmode=775']
Run Code Online (Sandbox Code Playgroud)
"" 表示您当前在主机上的目录
"/ vagrant"是指客户机(Vagrant机器)上的"/ home/vagrant" .
复制你需要发送到客户机,你有你的文件夹中的文件Vagrantfile
,然后打开的Git的Bash和cd
对你有你的目录Vagrantfile
,然后键入:
vagrant scp config.json XXXXXXX:/home/vagrant/
Run Code Online (Sandbox Code Playgroud)
其中XXXXXXX是您的虚拟机名称.您可以通过运行获取您的虚拟机名称
vagrant global-status
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
152578 次 |
最近记录: |