【问题标题】:Vagrant curl connection refused while provisioningVagrant curl 连接在配置时被拒绝
【发布时间】:2016-05-05 09:04:15
【问题描述】:

我在 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。有什么问题?

流浪文件

# -*- 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

【问题讨论】:

    标签: vagrant couchdb


    【解决方案1】:

    有两件事:

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

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

    在编写 shell 脚本时请考虑这一点,就像以 root 身份运行一样,您不需要 sudo

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

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

    【讨论】:

    • 感谢您的回复。不幸的是,配置为 vagrant 会产生相同的结果。
    • 您确定您的 couchdb 服务在您的配置运行时正在 5984 上运行吗?
    • 它没有运行。我sudo stop couchdb,修改配置文件,然后sudo start couchdb。但是当我netstat -tulpn 时,它不会在:5984 上显示任何进程。
    • 好的,所以你应该在启动进程时查看日志或错误 - 或者它需要一些时间才能启动并且你不能在它启动后的第二秒内直接推送 - 睡眠(3到5分钟)在你启动couchdb之后看看它是否运行
    • sleep 3s 然后curl... 工作。如果您将此作为新答案发布,我会接受。另外,您知道所需的延迟是否表明有问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2019-08-22
    • 1970-01-01
    • 2015-08-12
    • 2018-12-11
    • 1970-01-01
    • 2016-09-10
    相关资源
    最近更新 更多