我在Vagrant盒子上运行CouchDB。我想在配置框时创建数据库。要创建数据库,我使用curl将PUT
设置为127.0.0.1:5984/foo。如果我手动执行此操作,没问题。 SSH进入Vagrant框并运行命令有效。在主机上运行命令有效。但是如果我有配置脚本运行命令,我会收到此错误: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
答案 0 :(得分:1)
有两件事:
首先,当您在ssh进入框中后运行命令时,您将以vagrant
用户身份运行命令,但是当您按照所示运行配置时,实际上以root身份运行命令;所以要尊重你在ssh时所做的事情,确保以privileged: false
参数运行如下:
config.vm.provision "shell", privileged: false, path: "./scripts/provision_vagrant.sh"
在编写shell脚本时考虑这一点,就好像以root身份运行一样,不需要sudo
其次,当启动诸如couchdb之类的进程时,需要花费一些时间(几秒到一分钟,具体取决于硬件)才能完全启动并可用,这对于大多数进程(mysql,apache)都是完全正常的因此,当您从脚本运行curl
时,它可能正在运行,而沙发正在启动但并非完全可用。
最简单的就是睡眠充足,以便服务器启动 - 最复杂的版本是读取输出日志文件,直到它说它已经启动。