Vagrant curl 连接在配置时被拒绝

Vagrant curl connection refused while provisioning

我在 Vagrant 盒子上安装了 CouchDB 运行ning。我想在配置盒子时创建数据库。为了创建数据库,我使用 curl 将 PUT 设为 127.0.0.1:5984/foo。如果我手动执行此操作,没问题。 SSH-ing 进入 Vagrant 框并 运行ning 命令工作。 运行 主机上的命令有效。但是,如果我有配置脚本 运行 命令,我会收到此错误:curl: (7) Failed to connect to 127.0.0.1 port 5984: Connection refused。有什么问题?

Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network "forwarded_port", guest: 5984, host: 5984, host_ip: "127.0.0.1"
  config.vm.provision "shell", path: "./scripts/provision_vagrant.sh"
end

有两件事:

首先,当您 运行 在 ssh 进入该框后执行命令时,您将 运行 作为 vagrant 用户执行该命令,但是当您 运行 您的按照您实际显示的方式进行配置 运行 作为 root 的命令;因此,为了尊重您在 ssh 时所做的事情,请确保 运行 和 privileged: false 参数如下:

config.vm.provision "shell", privileged: false, path: "./scripts/provision_vagrant.sh"

在编写 shell 脚本时请考虑这一点,就好像您 运行 是根用户一样,您不需要 sudo

其次,当启动诸如 couchdb 之类的进程时,需要一些时间(几秒到一分钟,具体取决于硬件)才能完全启动并可用,这完全没问题,而且对于大多数进程来说都是一样的(mysql, apache) 所以当从你的脚本 运行ning curl 时它可能是 运行ning 而沙发正在启动并且不完全可用。

最简单的方法是睡眠到足以让服务器启动 - 最复杂的版本是读取输出日志文件,直到它说它已经启动。