首页 > 解决方案 > 在 docker 容器中使用凭据

问题描述

我正在从一个项目中构建一个 docker 映像,其中我有一个带有数据库默认凭据的文件。在 docker 容器运行时,我想传递真实的凭据并替换该文件上定义的变量。最好的方法是什么?我尝试使用环境变量,但它不起作用。

db_config.yml:

host: ${HOST}
user: ${USER}
pass: ${PASS}
port: ${PORT}
db: ${DB_NAME}

码头工人-compose.yml:

version: '2.3'

services:
  test_ctr:
      container_name: test
      image: container:latest

      network_mode: "host"
      environment: 
      - HOST=${HOST}
      - USER=${USER}
      - PASS=${PASS}
      - PORT=${PORT}
      - DB_NAME=${DB_NAME}

db_config.yml 在构建的图像中,语言是 Python。基本上,当我运行容器时,db_config.yml 被脚本变为红色并使用文件的凭据。当我创建图像时,这个 db_config.yml 具有默认凭据。但是当我运行容器时,我想替换这个文件

标签: dockerdocker-composedockerfile

解决方案


要调试此尝试运行:

docker exec -it <name-of-the-container> <command>

在您的情况下,这转化为: docker exec -it test sh

这应该会在容器内打开一个外壳。然后输入:

printenv

这将打印所有环境变量及其值(这样您将看到您传递的值是否存在)

如果容器在启动时崩溃,就会出现问题(在这种情况下,无法使用 docker exec)。

提示:使用与 docker-compose.yml(或任何 docker-compose 文件)位于同一目录中的 .env 文件来传递变量。

.env:

KEY1=value1
KEY2=value2

在您的情况下,这可能类似于:

HOST=1.2.3.4
USER=sa
PASSWORD=42
PORT=4242
DB_NAME=mydb

当你跑步时:

docker-compose up

docker-compose 将查找这个 .env 文件并从这个文件中注入值

祝你好运


推荐阅读