TL& DR:有没有办法强制Vagrant使用代理VM,即使主机操作系统本身支持Docker?
我使用Vagrant和Docker提供程序。 Vagrant VM是操作系统和Docker容器托管我的应用程序(Web服务器,数据库)。
问题:
Linux容器不能在非Linux机器上本机运行。如果你的 开发人员在Mac或Windows上,他们无法运行Docker容器 本身。 Vagrant检测到这些情况,自动旋转a 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安装,这几乎没有问题:
以下是我的Vagrant文件供参考:
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
答案 0 :(得分:0)
只需使用d.force_host_vm = true
选项
来自Vagrant docs:
force_host_vm(boolean) - 如果为true,那么主机虚拟机甚至会被启动 如果运行Vagrant的计算机支持Linux容器。这是 有助于强制运行Docker的一致环境。这个值 在Mac和Windows主机上默认为“true”,默认为“false” Linux主机。选择使用其他Docker的Mac / Windows用户 提供者或选择加入本机Docker构建可以明确地设置它 value为false以禁用该行为。