【问题标题】:Invalid HTTP_HOST header: The domain name provided is not valid -- requests to dockerized django app using container name无效的 HTTP_HOST 标头:提供的域名无效 -- 使用容器名称向 dockerized django 应用程序请求
【发布时间】:2018-10-25 20:23:25
【问题描述】:

在一个由多个通过 docker-compose 运行的微服务组成的应用程序中,我需要一种方法来从一个容器(app 通过烧瓶和请求)直接向另一个容器(chart/django)发出请求:

这是我正在尝试的简化版本。

routes.py:

@APP.route('/post_data', methods=['POST'])
def post_data():
  post_data = request.get_json()
  response = requests.post('http://chart_app_1:8080/json/', data=post_data)
  return response.text

我得到的响应是一条错误消息:

django.core.exceptions.DisallowedHost: Invalid HTTP_HOST header: 'chart_app_1:8080'. The domain name provided is not valid according to RFC 1034/1035

我可以向其他运行烧瓶应用程序的容器发出这种请求,没有任何问题。不过,我无法控制我们是否将 Django 用于这个特定的微服务。

这似乎是因为主机名中有一个下划线:see this post。有没有解决的办法?看来容器之间必须可以发出简单的请求。

【问题讨论】:

    标签: django docker flask docker-compose


    【解决方案1】:

    在 docker-compose 文件中,修改服务名称以避免 Django 服务中的下划线。

    这是我知道的避免错误的唯一方法,因为它不是 Docker 限制,而是 Django 问题。

    【讨论】:

    • 看起来设置container_name 会阻止它扩展——这在开发中是可以的。对于生产,我将设置一个环境变量作为容器的公共 url。
    • 这是 RFC 1034/1035 的事情。主机名不能包含下划线,并且您的 docker 容器在网络上的主机名是 chart_app_1。您需要重命名您的 docker 服务器以删除下划线。
    • @TomSaleeba 谢谢。我和我的同事被卡住了:|
    • 这不是 Django 问题,主机名不能包含下划线。
    • 发挥了作用!
    猜你喜欢
    • 2017-10-01
    • 1970-01-01
    • 2016-03-26
    • 2015-05-31
    • 2013-02-20
    • 2019-09-29
    • 2014-04-20
    相关资源
    最近更新 更多