docker - 如何为每个使用不同框的多个提供程序编写Vagrantfile?

标签 docker vagrant virtualbox

我的目标是创建一个Vagrantfile,我可以在其中使用--provider标志选择使用Docker或VirtualBox(例如,将vagrant up --provider = virtualbox)。我遇到了一个问题,因为Docker提供程序说我的机器不兼容。的确如此,但我不希望Docker使用此框。我有一个Dockerfile,我指向Docker使用。我希望仅在VirtualBox是提供程序的情况下使用此框。如何使Docker提供程序忽略框声明或使框声明仅在VirtualBox是提供程序时运行?

这是我的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

最佳答案

您只需要根据提供者移动框条件

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.provider "virtualbox" do |v, override|
    override.vm.box = "ubuntu/trusty64"
    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

关于docker - 如何为每个使用不同框的多个提供程序编写Vagrantfile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46623919/

相关文章:

virtualbox - 如何将 Vagrant 项目目录与现有 VirtualBox 虚拟机关联?

仅当用户具有权限时才运行 docker 命令(Bash if 或语句)

docker - 如何在launchsettings.json中为docker设置ServicePort

vagrant - 如何通过名称而不是 id 使环境 Vagrant 停止

ruby-on-rails - 如何在 Windows PC(Windows 7/Windows 8)上部署 Rails 应用程序?

ubuntu - 构建gem5的核心数是多少

installation - 在 Virtualbox 上安装 Gentoo,startx 失败

amazon-web-services - 在 AWS ECS : HardLimit cannot be empty 中设置 ulimit

node.js - Docker-compose up 以代码 1 退出,但 docker-compose build 成功

ubuntu - 如何将 vagrant precise32 升级到更新版本?