【发布时间】:2015-12-07 00:51:31
【问题描述】:
我对 Vagrant 进行了以下设置。
- 运行 Yosemite 的 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 以“由外而内”的顺序执行配置程序,因此我尝试了很多恶作剧,试图将 "shell" 提供程序嵌套在 config.vm.define "foo" do |blah| ... 调用中,但没有成功。
我相信在所有配置步骤完成之前,Docker 容器可能还没有启动?例如,调用了一些配置后步骤。在这种情况下,我将永远能够在配置器中运行脚本并在 Docker 容器监听各自的端口后运行它。
【问题讨论】:
标签: docker vagrant vagrantfile