2015-09-10 53 views
2

我使用Vagrant進行以下設置。vagrant:在Docker實例啓動後在Virtualbox中運行shell腳本(排序錯誤)

  • 運行優勝美地的Mac筆記本電腦。
  • 筆記本電腦內部,一個使用Virtualbox管理的Ubuntu trusty64實例。
  • 在Virtualbox Ubuntu實例中,有兩個Docker容器,其中一個運行Postgres,其中一個運行Redis。

我想在下面的順序來執行命令:

  1. 啓動VirtualBox的Ubuntu的實例。
  2. 啓動Docker容器。
  3. 啓動Docker容器。
  4. 在Ubuntu實例上運行一個命令。

我需要命令最後運行,因爲我希望它與容​​器交互。這是我現在在我的Vagrantfile中 - 我們正在使用多機配置。我忽略了一些forward_port的細節,因爲它們似乎與Vagrant運行預配置的順序無關。

Vagrant.configure("2") do |config| 
    config.vm.provider "docker" do |d| 
    d.vagrant_vagrantfile = "./docker-Vagrantfile" 
    end 

    config.vm.define "db" do |p| 
    p.vm.provider "docker" do |pd| 
     # ... 
    end 
    end 

    config.vm.define "redis" do |r| 
    r.vm.provider "docker" do |rd| 
     rd.name = "redis" 
     rd.image = "redis" 
    end 
    end 
end 

這裏是連接docker-Vagrantfile

Vagrant.configure("2") do |config| 
    config.vm.box = "trusty64" 
    config.vm.provision "docker" 
    config.vm.provision "shell", path: "./scripts/init_app.sh" 

    config.vm.provider "virtualbox" do |v| 
    # ... 
    end 
end 

不管我再怎麼努力,我不能讓init_app.sh到後運行的Docker容器開始運行。

我還看到Vagrant以「外部」的順序執行提供者,所以我嘗試了很多詭計,試圖在config.vm.define "foo" do |blah| ...調用中嵌套"shell"提供程序,但沒有運氣。

我相信也許Docker容器直到完成所有設置步驟之後纔會啓動?例如,有一些被調用的提供後步驟。在這種情況下,我會永不能夠在配置器中運行腳本,並在Docker容器在各自的端口上偵聽之後運行腳本。

回答

2

你可以看看vagrant trigger它可以得心應手。

即使它不是從主網頁記錄,有可以使用的run_remote命令

config.trigger.after :up do 
    run_remote "bash ./scripts/init_app.sh" 
end 

你的腳本將vagrant up之後運行已經運行,所以泊塢窗容器應準備

+0

它看起來像使用插件的好選擇,但在這種情況下,該插件有一個構建錯誤。我不知道使用它是否是一個好主意。 = 0) –

+0

奇怪也許你應該在這個項目上打開一張票或者詳細說明它應該工作的錯誤 –

相關問題