python - 在 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'
解决方案
您可以为此使用环境变量:
import os
HOST = os.environ.get('HOST_URL', 'localhost')
在里面Dockerfile
,设置一个环境变量
ENV HOST_URL host.docker.internal
更多信息可以在docker 文档中找到。
推荐阅读
- aws-lambda - 为什么 ALB 健康检查不处理 Lambdas 上的冷启动?
- python - PIL 图像在实际值存在的地方返回零
- r - 如何评估两个给定日期之间的特定日期
- python - 如何在 python 中使用 StanfordNLP 提取丹麦语中的名词短语?
- awk - 如何提取前两列,然后删除第二列中的部分信息?
- c# - 使用 C# 中的 ProcessStartInfo 运行 Rscript
- c++ - 归并排序的 C++ 实现的运行时错误
- tensorflow - Keras/Tensorflow 中涉及梯度的自定义损失函数
- node.js - 如何从graphql中的解析器返回自定义对象?
- angular - TypeError:无法使用 InvalidPipeArgument 读取 null 的属性“名称”:管道“AsyncPipe”的“[object Object]”