python - 如何更新 dockerfile 中的 python 字典?
问题描述
我有一个dockerfile,它在构建时克隆一个django项目,settings.py
django项目的字典如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
上面的字典ieDATABASES
需要更新为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': os.environ.get('DB_NAME', 'test'),
'USER': os.environ.get('DB_USER', 'test'),
'PASSWORD': os.environ.get('DB_PASSWORD', 'test'),
'HOST': os.environ.get('DB_HOST', 'test'),
'PORT': os.environ.get('DB_PORT', ''),
}
}
这怎么能在 dockerfile 中完成?我已经sed
在 dockerfile 中使用命令来用它的值替换其他单行变量。请帮我更新字典。
注意:我无权提交我在 dockerfile 中克隆的项目存储库。所以我需要一个解决方案,它可以在 dockerfile 本身中执行上述所需的更改。
解决方案
在 Dockerfile 中手动编辑文件内容似乎不是一个好主意。
dev_settings.py
只有两个设置文件(例如和)会容易得多prod_settings.py
,然后通过设置适当的环境变量来配置 Docker 映像将使用哪一个:
ENV DJANGO_SETTINGS_MODULE=myapp.prod_settings
在不修改原始存储库的情况下,您仍然可以通过创建覆盖文件来执行相同操作,例如:
# my_settings.py
from .settings import *
DATABASES = { } # Custom settings here
然后在构建期间将其粘贴到应用程序设置目录中并设置环境变量:
# Dockerfile
COPY my_settings.py /myapp/my_settings.py # Next to original settings file
ENV DJANGO_SETTINGS_MODULE=myapp.my_settings
该my_settings.py
文件只需要在您的 Docker 构建上下文中,因此您无需接触克隆的 repo。
推荐阅读
- php - 如何根据经纬度应用过滤器?
- azure - 如何使用 Azure SignalR 服务托管 SignalR 集线器?
- python - 如何解决 AttributeError:SMTP_SSL 实例在 Python 中没有属性“__exit__”?
- java - java FX - 日历中的 Datepicker 天数变灰
- php - 从 Woocommerce 管理员编辑订单页面中删除运输行
- python - 查找重复的行,将某个列乘以重复的数量,删除重复的行
- java - 使用 nd4j 的 Sigmoid 导数
- html - 我想一天只显示一次弹出窗口
- odata - “模型无法解析名为 'Product' 的类型。当模型可用时,每个类型名称都必须解析为有效类型。” 在 D365 中
- slf4j - 如何使用 Lombok 创建 Logger 对象?