【问题标题】:docker-compose flask network issuedocker-compose flask 网络问题
【发布时间】:2019-09-23 15:58:37
【问题描述】:

我有一个 python 烧瓶项目,它应该是一个用于内部网络的网络应用程序。它位于以 docker-compose 文件开头的 docker 映像中。

有时当我运行它时,烧瓶服务器不会收到来自外界的消息。我认为这一定是 docker-compose 自动创建的 docker 网络的问题。每当出现此问题时,我都必须重新启动盒子,然后将容器重新启动,它会自行修复。

还有其他人看过吗?

当我说它没有看到来自盒子外部的连接时,我的意思是 HTTP 请求永远不会到达烧瓶服务器。我可以尝试从另一台机器转到与烧瓶服务器对应的 URL,而烧瓶服务器什么也看不到。但是,如果我尝试从盒子内部(不是在容器内部,而是在容器正在运行的盒子上)发送 HTTP GET 请求,flask 服务器就会响应。

所以这让我相信 docker-compose 正在创建一个未正确配置的 docker 网络以允许容器侦听外部请求。

这是我的 docker compose 文件:

version: '3.7'
services:
  falcon:
    image: "company.com/internal/falcon:0.1"
    container_name: falcon
    env_file:
      - ~/.env
    ports:
      - "80:80"
    volumes:
      - ${REPOS}/falcon:/app
    command: /conda/bin/falcon start

【问题讨论】:

  • 尝试使用network=host 只是为了确定问题是否仍然存在
  • 您的app.run() 看起来如何? 1)你使用端口80,但是Flask默认是5000,所以使用ports: -"80:5000"。 2) Flask 默认主机是localhost,但要使其在 docker 之外可以访问,您需要有0.0.0.0.*
  • @BrunoLubascher 是的,抱歉,我已经解决了这些问题。真的,我认为这与 linux 和 docker-compose 的关系比烧瓶更重要。

标签: python docker flask docker-compose


【解决方案1】:

这还没有经过广泛的测试,但似乎已经解决了问题:

version: '3.7'
services:
  falcon:
    image: "company.com/internal/falcon:0.1"
    container_name: falcon
    network_mode: bridge  # also tried host, I think bridge is right.

另一种解决方案似乎省略了上面的network_mode并将其放在下面:

networks:
    default:
        external:
            name: prod_default

我仍然不知道为什么会这样,但这两种解决方案似乎都可以解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2019-02-26
    • 2020-01-22
    相关资源
    最近更新 更多