我使用Vagrant進行以下設置。vagrant:在Docker實例啓動後在Virtualbox中運行shell腳本(排序錯誤)
- 運行優勝美地的Mac筆記本電腦。
- 筆記本電腦內部,一個使用Virtualbox管理的Ubuntu trusty64實例。
- 在Virtualbox Ubuntu實例中,有兩個Docker容器,其中一個運行Postgres,其中一個運行Redis。
我想在下面的順序來執行命令:
- 啓動VirtualBox的Ubuntu的實例。
- 啓動Docker容器。
- 啓動Docker容器。
- 在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容器在各自的端口上偵聽之後運行腳本。
它看起來像使用插件的好選擇,但在這種情況下,該插件有一個構建錯誤。我不知道使用它是否是一個好主意。 = 0) –
奇怪也許你應該在這個項目上打開一張票或者詳細說明它應該工作的錯誤 –