【问题标题】:Communication between Docker Application and localhost application [duplicate]Docker应用程序和本地主机应用程序之间的通信[重复]
【发布时间】:2020-05-01 06:08:19
【问题描述】:

我有一个在 Docker(M1) 中运行的应用程序。另一个在 localhost 上运行的应用程序(M2-Not Dockerized)。两者都是在端口 3000 和 3001 上运行的 Ruby on Rails 应用程序。我使用

从 M1 内部调用 M2

response = http_client.post("127.0.0.1:3001", query, {}, options)

但我继续得到

Error: Failed to open TCP connection to 127.0.0.1:3001 (Connection refused - connect(2) for "127.0.0.1" port 3001), Backtrace: ["/usr/local/lib/ruby/2.5.0/net/http.rb:939:in `rescue in block in connect'", "/usr/local/lib/ruby/2.5.0/net/http.rb:936:in `block in connect'", "/usr/local/lib/ruby/2.5.0/timeout.rb:93:in `block in timeout'", "/usr/local/lib/ruby/2.5.0/timeout.rb:103:in `timeout'", "/usr/local/lib/ruby/2.5.0/net/http.rb:935:in `connect'"

如果我使用 -

response = http_client.post("localhost:3001", query, {}, options)

然后我得到

Error: Failed to open TCP connection to localhost:3001 (Cannot assign requested address - connect(2) for "localhost" port 3001), Backtrace: ["/usr/local/lib/ruby/2.5.0/net/http.rb:939:in `rescue in block in connect'", "/usr/local/lib/ruby/2.5.0/net/http.rb:936:in `block in connect'"

所以它从拒绝连接更改为无法分配请求的地址。

我可以通过分别从浏览器调用 localhost:3000 和 localhost:3001 来访问这两个应用程序。我假设它的发生是因为一个 Dockerized 应用程序调用了一个非 Dockerized 应用程序。有人可以建议如何在两者之间建立联系,我已经尝试了很多东西。我在 macOS Mojave 10.14.6 和 Ruby 2.5.0 上运行 Docker-2.1.0.5。如果需要任何其他信息,请告诉我。

【问题讨论】:

    标签: ruby-on-rails ruby docker tcp


    【解决方案1】:

    问题可能出在您对“localhost”的请求中。在您的请求中,将 localhost 替换为 0.0.0.0。它很可能会起作用。请参阅https://github.com/moby/moby/issues/2522 了解更多信息。根据穆勒米歇尔的说法: It's basically the same when you want to make couchdb accessible from outside your host, no matter whether it runs in a container or not: you need to bind it's address to 0.0.0.0:

    所以只要使用 0.0.0.0 就可以了!

    编辑:

    这可能是一个活跃的问题,尚未提供修复。 github线程见https://github.com/topofocus/active-orient/issues/22,目前还没有解决方案。

    编辑 2:

    Failed to open TCP connection to localhost:9200 (Cannot assign requested address - connect(2) for "localhost" port 9200)。它可能会解决您的问题。

    【讨论】:

    • 它给出了相同的错误Failed to open TCP connection to 0.0.0.0:3001 (Connection refused - connect(2) for "0.0.0.0" port 3001), Backtrace: ["/usr/local/lib/ruby/2.5.0/net/http.rb:939:in rescue in block in connect'", "/usr/local/lib/ruby/2.5.0/net/http.rb:936:in @987654327 @block in timeout'`
    • github.com/topofocus/active-orient/issues/22 这个 github 问题作为搜索结果出现。似乎 0.0.0.0 可能是最好的解决方案,但仍然不是总是有效的解决方案
    • 是的,我在某处读到过 Puma 可能会根据版本引起问题。仍在检查链接。
    • 确保您还将 m2 从 localhost 更改为 0.0.0.0
    • 无论我是否将 M2 绑定到 0.0.0.0,我都可以通过调用 localhost 或 0.0.0.0 或 127.0.0.1 从浏览器访问它。我仍然会检查这个东西,也许 Dockerized 应用程序(M1)需要 M2 显式绑定到 0.0.0.0。
    猜你喜欢
    • 2019-05-08
    • 1970-01-01
    • 2012-10-04
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2011-03-11
    相关资源
    最近更新 更多