vagrant:在Docker实例启动后在Virtualbox中运行shell脚本(sorting错误)
我有以下设置与stream浪汉。
- 一台运行优胜美地的Mac笔记本电脑。
- 在笔记本电脑内部,一个使用Virtualboxpipe理的Ubuntu trusty64实例。
- 在Virtualbox Ubuntu实例的内部,有两个Docker容器,其中一个运行Postgres,另一个运行Redis。
我想按以下顺序执行命令:
- 启动Virtualbox Ubuntu实例。
- 启动Docker容器。
- 启动Docker容器。
- 在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集装箱准备就绪