首页 > 解决方案 > 在 django 设置中设置一个变量,条件是 dockerized

问题描述

我正在构建一个 Django 站点,该站点可能会部署在多个站点,有些是 dockerized,有些不是。

在 Django settings.py 文件中,有一个设置可能会根据主机(IP 地址)变量而改变,尤其是在 Docker 容器中运行时。

特别是,Docker 使用这个特殊的 DNS 名称(host.docker.internal)来引用 docker 容器中的主机 localhost,其中仅在容器中使用 localhost 是指 docker 实例 localhost。

例如,Django 将使用以下情况连接到 SQL 实例。Django 是 dockerized 并且数据库在主机服务器上:

'HOST': 'host.docker.internal'

在另一种情况下,Django 不是在 docker 容器中运行,而是在主机上运行,​​因此它可以直接在本地访问数据库:

'HOST': 'localhost'

问题:有没有办法在需要这样的环境变量之前做出条件语句,例如:

if in_docker:
    HOST = 'host.docker.internal'
else:
    HOST = 'localhost'

标签: pythondjangodocker

解决方案


您可以为此使用环境变量:

import os
HOST = os.environ.get('HOST_URL', 'localhost')

在里面Dockerfile,设置一个环境变量

ENV HOST_URL host.docker.internal

更多信息可以在docker 文档中找到。


推荐阅读