我的目标是创建一个Vagrantfile,我可以选择使用Docker或VirtualBox使用--provider标志(例如vagrant up --provider = virtualbox)。我遇到了问题,因为Docker提供者说我的盒子不兼容。这是真的,但我不希望Docker使用这个盒子;我有一个我指向Docker使用的Dockerfile。我希望只有当VirtualBox是提供者时才能使用该框。如何让Docker提供程序忽略框声明或仅在VirtualBox是提供程序时才使框声明运行?如何为多个提供者编写一个Vagrantfile,每个提供者使用不同的框?
这是我Vagrantfile:
Vagrant.require_version ">= 1.7.0"
Vagrant.configure('2') do |config|
PROJECT_ROOT = File.expand_path(File.join(File.dirname(File.expand_path(__FILE__)), '..'))
config.vm.provider "docker" do |d|
d.build_dir = "."
d.has_ssh = true
end
config.vm.box = "ubuntu/trusty64" # <--------- this is the line the Docker provider chokes on
config.vm.provider "virtualbox" do |v|
v.gui = true
end
config.vm.network :forwarded_port, guest: 80, host: 9002
config.vm.network :forwarded_port, guest: 9000, host: 9000
config.vm.network :forwarded_port, guest: 9001, host: 9001
config.vm.synced_folder PROJECT_ROOT, '/srv'
config.vm.provision :ansible do |ansible|
ansible.verbose = "v"
ansible.playbook = 'provisioning/playbook.yml'
end
end
你尝试运行呢?它不起作用。 'config.vm.provider'不是一个条件语句。分析文件时,所有对'config.vm.provider'的调用都是如此。 – hekevintran
@hekevintran,请检查更新后的答案 –
好的发现啊,重写就是答案!谢谢! – hekevintran