2015-12-19 41 views
1

安裝目錄下我使用的是無業遊民,而不是讓我們說搬運工,撰寫,作爲vagrantfile是一個Ruby文件,它提供了更多的靈活性流浪使用泊塢窗作爲供應商在MacOS,不可能在容器

我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中運行泊塢窗。因此,這將失敗,因爲

d.volumes = [ 
    "#{ENV['PWD']}/myproject:/var/www/symfony2", 
] 

需要#{ENV['PWD']}從MacOS的機器,但在Linux中運行,所以不存在路徑和失敗。然而,我不能把相對路徑,因爲碼頭需要一個絕對的一個

所以有什麼解決方法嗎? (除了創建自己的虛擬機,然後我安裝vagrant並從那裏運行命令)

回答

1

默認情況下Vagrant Docker提供程序使用boot2docker在Windows和MacOS機器上託管Docker。但是您可以使用vagrant_vagrantfile參數爲Docker Host VM指定自定義Vagrant文​​件。那就是:

d.vagrant_vagrantfile = "../path/to/Vagrantfile" 

在此Vagrantfile您可以配置文件夾同步(MacOS和碼頭工人主機VM之間),你可以在你的搬運工卷配置使用一些已知的絕對路徑。

爲了讓有條件的基礎上流浪主機操作系統,你可以把它裏面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 
+0

感謝,實際上作爲一種解決方法,我做了類似的事情,但手動(即設置第一個vagrant文​​件,這是安裝我的存儲庫,然後安裝vagrant和docker等在其中)您的解決方案作爲製造的優勢自動化:),我將嘗試它並使其交叉平臺(因爲我不想在Linux上運行時擁有虛擬機) –

+0

您可以將基於主機操作系統的條件配置放在簡單的IF塊內,如下所示:如果/darwin/.match(RUBY_PLATFORM)' –

+0

是的,我正在用類似的東西,使用linux的#env {pwd}和其他的硬編碼絕對路徑。 –

0

對於這個在Mac OS X和流浪工作,你有兩個選擇。前段時間我在https://gist.github.com/andyshinn/8c88974daf8204da32f7上爲另一個類似的問題提供了一個例子。

這裏的重要部分是config.vm.synced_folder行。如果您的Vagrant VM支持NFS(boot2docker不支持),那麼您可以使用NFS。否則,rsync方法將適用於boot2docker等機器。

但是,如果您使用的是Vagrant,我會在Atlas Vagrant框中搜索支持NFS的boot2docker。