Python docker-如何从env.ini文件outide为docker-compose.yml文件设置环境数据库?

Python docker-如何从env.ini文件outide为docker-compose.yml文件设置环境数据库?,python,django,docker,Python,Django,Docker,这是我的docker compose.yml,我硬编码数据库的信息 为了安全起见,我想从我的env.ini文件中输入,然后将其推送到GitLab,但不知道如何操作 version: "3.8" services: db: image: postgres environment: - POSTGRES_DB=####### Hide these information and take it from

这是我的
docker compose.yml
,我硬编码数据库的信息

为了安全起见,我想从我的
env.ini
文件中输入,然后将其推送到GitLab,但不知道如何操作

version: "3.8"
services:
  db:
    image: postgres
    environment:
      - POSTGRES_DB=#######                     Hide these information and take it from
      - POSTGRES_USER=#####                     another file when running it
      - POSTGRES_HOST=172#####
      - POSTGRES_PASSWORD=#########
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
另外:我的文件
env.ini
非常复杂,因为它包含很多其他信息,它看起来像这样:

[sv_info]
host = #########
user = ########
password = ########
database = #
venus_base_url = #################
venus_auth_key =
cargo_base_url = #################
cargo_awb_acckey = #################
cargo_awb_cusnum = #################
cargo_awb_user = #################
cargo_awb_revkey = #################

[heremap_info]
url = #################
api_key = #################
通常,我在
Python
中使用
from configparser import configparser
在代码中使用此
env.ini

  • 添加文件settings.ini.template,如:
  • 将其添加到存储库中
  • 在项目中添加变量
    用户名
    密码
现在在本节的
gitlab ci.yml
中,在脚本之前执行以下操作:

sed -e 's/@@USERNAME@@/'$THE_USERNAME'/' -e 's/@@PASSWORD@@/'$THE_PASSWORD'/' settings.ini.template > settings.ini.
  • 添加文件settings.ini.template,如:
  • 将其添加到存储库中
  • 在项目中添加变量
    用户名
    密码
现在在本节的
gitlab ci.yml
中,在脚本之前执行以下操作:

sed -e 's/@@USERNAME@@/'$THE_USERNAME'/' -e 's/@@PASSWORD@@/'$THE_PASSWORD'/' settings.ini.template > settings.ini.

首先,带有环境变量的文件应命名为
.env
,其内容如下:

POSTGRES_DB=cookies
POSTGRES_USER=jamie
POSTGRES_PASSWORD=oliver
POSTGRES_HOST=127.0.0.1
这些环境变量应该传递给容器。要实现这一点,您应该更新docker compose配置,如下所示:

version: "3.8"
services:
  db:
    image: postgres
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_HOST=${POSTGRES_HOST}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
然后在django设置中:

导入操作系统
# ...
数据库={
“默认值”:{
“引擎”:“django.db.backends.postgresql_psycopg2”,
“名称”:os.environ['POSTGRES_DB'],
“用户”:os.environ['POSTGRES_USER'],
“密码”:os.environ['POSTGRES_PASSWORD'],
'HOST':os.environ['POSTGRES_HOST'],
“端口”:5432,
},
}
我还强烈建议使用包读取环境变量的值

从环境导入环境
env=env()
IS_ENABLED=env.bool('IS_ENABLED',默认值=True)

这意味着,即使环境变量
已启用
值为
True
(字符串)environs将其转换为
bool
首先,您的环境变量文件应命名为
.env
,其内容如下:

POSTGRES_DB=cookies
POSTGRES_USER=jamie
POSTGRES_PASSWORD=oliver
POSTGRES_HOST=127.0.0.1
这些环境变量应该传递给容器。要实现这一点,您应该更新docker compose配置,如下所示:

version: "3.8"
services:
  db:
    image: postgres
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_HOST=${POSTGRES_HOST}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
然后在django设置中:

导入操作系统
# ...
数据库={
“默认值”:{
“引擎”:“django.db.backends.postgresql_psycopg2”,
“名称”:os.environ['POSTGRES_DB'],
“用户”:os.environ['POSTGRES_USER'],
“密码”:os.environ['POSTGRES_PASSWORD'],
'HOST':os.environ['POSTGRES_HOST'],
“端口”:5432,
},
}
我还强烈建议使用包读取环境变量的值

从环境导入环境
env=env()
IS_ENABLED=env.bool('IS_ENABLED',默认值=True)
这意味着,即使环境变量
已启用
值为
True
(字符串)environs也会将其转换为
bool

检查此项了解更多信息检查此项了解更多信息