我使用的是vagrant,而不是说docker-compose,因为vagrantfile是ruby文件,它提供了更大的灵活性
我的Vagrantfile看起来像这样
Vagrant.configure(2) do |config|
config.vm.define "db" do |app|
app.vm.provider "docker" do |d|
d.image = "postgres:9.5"
d.name = "myproject_db"
d.env = {
'POSTGRES_USER' => "admin",
'POSTGRES_PASSWORD' => "password",
}
end
end
config.vm.define "fpm" do |app|
app.vm.provider "docker" do |d|
d.build_dir = "dockerfiles/php-fpm/"
d.name="myproject_fpm"
d.link "myproject_db:db"
d.volumes = [
"#{ENV['PWD']}/myproject:/var/www/symfony2",
]
end
end
end
在Linux硬件主机上时,它工作得很好,但是在Mac上,它失败了,因为
vagrant up --provider docker
将启动一个中间linux盒来运行docker。因此它将失败,因为 d.volumes = [
"#{ENV['PWD']}/myproject:/var/www/symfony2",
]
从MacOS计算机上获取
#{ENV['PWD']}
,但在linux机器上运行它,因此该路径不存在并且失败。但是我不能给出相对路径,因为 docker 需要一个绝对路径那么有什么解决方法吗? (除了创建自己的virtualbox之外,我然后在其上安装vagrant并从那里运行命令)
最佳答案
默认情况下,Vagrant Docker提供程序使用boot2docker在Windows和MacOS计算机上托管Docker。但是您可以使用vagrant_vagrantfile参数为Docker主机VM指定自定义Vagrant文件。那是:
d.vagrant_vagrantfile = "../path/to/Vagrantfile"
在此Vagrantfile中,您可以将文件夹同步(在MacOS和Docker Host VM之间)配置为可以在Docker卷配置中使用的某个已知绝对路径。
要使其基于Vagrant Host OS有条件,可以将其放在IF块中:
if /darwin/.match(RUBY_PLATFORM)
#MACOS optional configuration
elsif /mingw|mswin/.match(RUBY_PLATFORM)
#Windows optional configuration
else
#everything else, most probably Linux
end
关于docker - 在MacOS上使用docker作为提供程序的游民,无法在容器中挂载目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34372756/