Django-debug-toolbar: Dockerに複数のネットワークがある場合のIPが間違っている

作成日 2018年04月13日  ·  5コメント  ·  ソース: jazzband/django-debug-toolbar

DjangoコンテナがDockerの複数のネットワークに接続されている場合、 cookiecutter-djangoで使用されるソリューションは機能しません。 解決策は次のようなものです(このSO投稿から取得):

import socket

ip = socket.gethostbyname(socket.gethostname())
INTERNAL_IPS = ['127.0.0.1', ip[:-1] + '1']

DockerCompose構成には次の項目があります。

networks:
  web_network: {}
  cache_network: {}
  database_network: {}


services:
  djangoapp:
    networks:
      - database_network
      - web_network
      - cache_network

現在、 ip = socket.gethostbyname(socket.gethostname())によって返されるIPは常に同じではありません。 これは、利用可能なさまざまなネットワークの1つのIPのようです(それが理にかなっている場合)。 そのため、機能することもありますが、ほとんどの場合は機能しません。

socketによって返されたものに基づいて、考えられるすべてのIPを追加することになりました。

def internal_docker_ips(base_ip):
    numbers = base_ip.split('.')
    return [
        '.'.join([numbers[0], str(i), numbers[2], str(j)])
        for i in range(1, 254) for j in (1, 3)  # all IPs ending with '.1' and '.3'
    ]

INTERNAL_IPS = [
    '127.0.0.1',
]

INTERNAL_IPS.extend(
    internal_docker_ips(
        socket.gethostbyname(
            socket.gethostname())))

# ['127.0.0.1', '172.1.0.1', '172.1.0.3', '172.2.0.1', '172.2.0.3', ..., '172.253.0.1', '172.253.0.3']

これに対するよりクリーンな回避策はありますか? 同じ問題を抱えている人はいますか? Djangoデバッグツールバー自体とは関係がないかもしれませんが、助けていただければ幸いです。他の人にも役立つと思います。

最も参考になるコメント

これが私がすることです:

if DEBUG:
    # `debug` is only True in templates if the vistor IP is in INTERNAL_IPS.
    INTERNAL_IPS = type(str('c'), (), {'__contains__': lambda *a: True})()

すべてのものを含むオブジェクトをINTERNAL_IPS割り当てるだけです。 もちろん、本番ホストでは絶対にこれを行わ

全てのコメント5件

これが私がすることです:

if DEBUG:
    # `debug` is only True in templates if the vistor IP is in INTERNAL_IPS.
    INTERNAL_IPS = type(str('c'), (), {'__contains__': lambda *a: True})()

すべてのものを含むオブジェクトをINTERNAL_IPS割り当てるだけです。 もちろん、本番ホストでは絶対にこれを行わ

頭がいい! 言及されたSO投稿にこの回答を追加することを検討する必要があります! 私は間違いなくそれを賛成します:smile:

ここに追加しました:) https://stackoverflow.com/a/49818040/317346

この問題にはこれ以上関心がないようで、私は答えを得ました:closeing:slightly_smiling_face:

私の同僚の1人は、これに別のソリューションを使用しています。実際、django-debug-toolbarは、 SHOW_TOOLBAR_CALLBACKという構成設定を提供します。

DEBUG_TOOLBAR_CONFIG = {
    'SHOW_TOOLBAR_CALLBACK': lambda request: True,
}

# or

DEBUG_TOOLBAR_CONFIG = {
    'SHOW_TOOLBAR_CALLBACK': lambda request: True if DEBUG else False,
}
このページは役に立ちましたか?
0 / 5 - 0 評価