【问题标题】:Docker network/services issueDocker 网络/服务问题
【发布时间】:2019-03-10 06:50:03
【问题描述】:

我有一个包含 3 个服务的 docker-compose 文件,如下所示

service:
service1-dev:
(filled with the good config)
network : 
 custom_network
 ipv4_address:167.34.0.5
service2-test:
(filled with the good config)
network : 
 custom_network
 ipv4_address:167.34.0.3
service3-request:
(filled with the good config)
network : 
 custom_network
 ipv4_address:167.34.0.2

networks:
custom_network:
driver: bridge
ipam:
  config:
    - subnet: 167.34.0.0/16

一切正常,我的 service1-dev 正在 0.0.0.0:8081 上运行 当我的开发容器运行时,我可以在浏览器中使用以下内容轻松访问它:http://localhost:8081/test 我收到了我的 json

问题是我正在运行我的 service3-request,它应该向我的 service1-dev 发送一些请求,但请求不起作用。

我不明白为什么我的两个容器都在同一个网络 167.34.0.0/16 中不工作,它们都可以互相 ping,但我试图做一个: 卷曲http://localhost:8081/test 错误 502

卷曲http://167.34.0.5:8081/test 什么都不做

但它不起作用。

所以我不明白如何 ping 我的所有容器,但是当我调用我的服务时我无法收到我的 json

【问题讨论】:

    标签: docker flask docker-compose


    【解决方案1】:

    您是否有权访问某些日志文件来检查该 502 错误。

    想到了什么,运行netstat -tanp | grep LISTEN

    这应该会给你类似的东西,其中 :::* 意味着任何人都可以连接到该端口。

    tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2868/cupsd
    tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      3568/master
    tcp        0      0 :::42266                    :::*                        LISTEN      2794/rpc.statd
    tcp        0      0 :::10080                    :::*                        LISTEN      25226/java
    

    根据我们的讨论 - 出于安全原因,烧瓶可能是这样制作的。 通过这种方式,您应该安装本地 Web 服务器并将其配置为服务器您的烧瓶应用程序。请注意,这是在生产环境中运行应用的最佳方式!

    我会推荐 nginx,因为它是免费的、非常轻便、超级快速且非常易于设置。 https://nginx.org/

    顺便说一句,在这里阅读该主题:What does "app.run(host='0.0.0.0') " mean in Flask

    【讨论】:

    • 我做了这个命令,我得到了这个结果tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 1/python
    • 看看我的例子中的最后一行 - 现在应该从外面看到它
    • 我不确定如何达到您的结果。我的 service1-dev 是一个烧瓶应用程序,当我运行烧瓶应用程序时,我像这样app.run(host='0.0.0.0', port=8081) 运行它,它应该公开吗?
    • host='0.0.0.0' 这是您可以更改的参数吗?试试'*'
    • 我尝试但不起作用不是有效的参数。(我什至无法启动我的 service1-dev)我确实阅读了一些关于烧瓶应用程序的文档以将其公开我确实尝试了他们所说的文档,但仍然无法正常工作。它正在运行,但我无法到达。
    【解决方案2】:

    所有要做的就是取消设置我的代理并在我的请求中使用容器名称curl http://service1-dev:8081/test

    现在一切正常!

    【讨论】:

      猜你喜欢
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2010-11-14
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多