vagrant:在Docker实例启动后在Virtualbox中运行shell脚本(sorting错误)

我有以下设置与stream浪汉。

  • 一台运行优胜美地的Mac笔记本电脑。
  • 在笔记本电脑内部,一个使用Virtualboxpipe理的Ubuntu trusty64实例。
  • 在Virtualbox Ubuntu实例的内部,有两个Docker容器,其中一个运行Postgres,另一个运行Redis。

我想按以下顺序执行命令:

  1. 启动Virtualbox Ubuntu实例。
  2. 启动Docker容器。
  3. 启动Docker容器。
  4. 在Ubuntu实例上运行一个命令。

我需要命令最后运行,因为我希望它与容​​器交互。 这是我现在在我的stream浪文件中 – 我们正在使用多机configuration。 我已经省略了一些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 

不pipe我多么努力,我都无法在Docker容器开始运行运行init_app.sh

我还读到,stream浪者以“外在”的顺序执行提供者,所以我尝试了很多诡计,试图在config.vm.define "foo" do |blah| ...嵌套"shell"提供程序config.vm.define "foo" do |blah| ... 打电话,没有运气。

我相信Docker容器在所有的configuration步骤完成之后才会启动? 例如,有一些被调用的后置步骤。 在这种情况下,我永远无法在configuration器中运行脚本,并在Docker容器正在侦听各自的端口之后运行该脚本。

你可以看看stream浪的触发器,它可以很方便。

即使它没有从主页面loggingrun_remote ,也可以使用run_remote命令

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

您的脚本将在vagrant up运行后运行,以便docker集装箱准备就绪