首页 > 解决方案 > 如何更新 dockerfile 中的 python 字典?

问题描述

我有一个dockerfile,它在构建时克隆一个django项目,settings.pydjango项目的字典如下:

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 本身中执行上述所需的更改。

标签: pythonpython-3.xdockerseddockerfile

解决方案


在 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。


推荐阅读