Vagrant和Docker提供者:一种强制代理VM的Linux主机的方法?

TL&DR: 有没有办法强制Vagrant使用代理虚拟机,即使主机操作系统本身支持Docker?

我使用Docker提供程序的Vagrant。 Vagrant VM是OS和Docker容器托pipe我的应用程序(Web服务器,DB)。

问题:

Linux容器不能在非Linux机器上本地运行。 如果您的开发人员在Mac或Windows上,他们不能原生运行Docker容器。 Vagrant检测到这些情况并自动启动Linux虚拟机来运行Docker容器。

[…]

如果Vagrant与Linux上的Docker一起使用, Vagrant将不会自动启动虚拟机 ,而是本机运行Docker

资料来源: http : //www.vagrantup.com/blog/feature-preview-vagrant-1-6-docker-dev-environments.html

Vagrant自动为不支持本地Docker的操作系统启动代理虚拟机,这是非常好的,因为它们拥有相同的操作系统。 但是,对于Linux主机,我们坚持使用原生的Docker安装,这导致了一些问题:

  • 文件/文件夹权限
  • 不同的用户为不同的Linux操作系统(Apache用户有时“apache”,有时“www”,这取决于你的Linux发行版)

这里是我的stream浪文件的参考:

DockerHost.Vagrantfile

Vagrant.configure("2") do |config| config.vm.provision "docker" config.vm.box = "ubuntu/trusty64" config.vm.define "dockerhost" config.vm.network :forwarded_port, guest: 80, host: 8080 config.vm.synced_folder "/sites", "/sites" [...] config.vm.provider :virtualbox do |vb| vb.name = "Vagrant-Dockerhost" vb.memory = 1024 # => Required by MySQL Server end end 

Vagrantfile

 ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker' DOCKER_HOST_NAME = "dockerhost" DOCKER_HOST_VAGRANTFILE = "DockerHost.Vagrantfile" Vagrant.configure("2") do |config| config.vm.define "mysql-server" do |v| v.vm.provider "docker" do |d| d.image = "mysql" d.name = "mysql-server" d.env = { MYSQL_ROOT_PASSWORD: "rootpasswd", MYSQL_USER: "mysqluser", MYSQL_PASSWORD: "userpasswd", MYSQL_DATABASE: "dev" } d.volumes = ["/mysql:/var/lib/mysql"] d.cmd = ["/entrypoint.sh", "mysqld"] d.remains_running = true d.vagrant_machine = "#{DOCKER_HOST_NAME}" d.vagrant_vagrantfile = "#{DOCKER_HOST_VAGRANTFILE}" end end config.vm.define "apache-server" do |v| v.vm.provider "docker" do |d| d.image = "lacavalerie/apache-server" d.ports = ["80:80"] d.name = "apache-server" d.link("mysql-server:db") d.volumes = [...] d.cmd = ["/scripts/setup.rb"] d.remains_running = true d.vagrant_machine = "#{DOCKER_HOST_NAME}" d.vagrant_vagrantfile = "#{DOCKER_HOST_VAGRANTFILE}" end end end 

只需使用d.force_host_vm = true选项

从stream浪者文档:

force_host_vm(boolean) – 如果为true,则即使运行Vagrant的计算机支持Linux容器,宿主虚拟机也将被启动。 这对强制运行Docker的一致环境很有用。 此值在Mac和Windows主机上默认为“true”,在Linux主机上默认为“false”。 select使用不同Docker提供程序或selectjoin本机Docker构build的Mac / Windows用户可以将此值显式设置为false以禁用此行为。