在docker容器中使用凭据

在docker容器中使用凭据,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我正在从一个项目中构建docker映像,在该项目中,我有一个带有数据库默认凭据的文件。在docker容器运行时,我希望传递真实的凭据并替换该文件中定义的变量。最好的方法是什么?我尝试使用环境变量,但它不起作用 db_config.yml: host: ${HOST} user: ${USER} pass: ${PASS} port: ${PORT} db: ${DB_NAME} docker-compose.yml: version: '2.3' services: test_ctr:

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

db_config.yml:

host: ${HOST}
user: ${USER}
pass: ${PASS}
port: ${PORT}
db: ${DB_NAME}
docker-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。基本上,当我运行container时,db_config.yml被一个脚本染成红色,并使用文件的凭据。创建映像时,此db_config.yml具有默认凭据。但是,当我运行容器时,我想替换此文件以调试此尝试运行:

docker exec -it <name-of-the-container> <command>
这将打印所有环境变量及其值(这样您将看到您传递的值是否存在)

如果容器在启动时崩溃,则会出现问题(在这种情况下,不可能使用docker exec)

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

.env:

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

HOST=1.2.3.4
USER=sa
PASSWORD=42
PORT=4242
DB_NAME=mydb
跑步时:

docker-compose up
docker compose将查找此.env文件,并将从此文件中插入值


祝你好运

你能给我们展示一下你用环境变量做了什么吗?没有理由认为它不应该工作,因为这是它对各种流行图像(例如MySQL)的处理方式。您能提供更多信息吗?db_config.yml是否在docker图像中?什么是项目语言ruby、java或bash?但如何在文件中引用env变量${VARIABLE}是否正确?在docker compose中,您可以使用:HOST=${HOST}或HOST=$HOST,甚至类似于:HOST_PORT=“${HOST}:${PORT}”(如果您想插入)这样会将变量注入容器,但现在您的应用程序必须读取它们,这取决于特定框架使用的机制。我见过Java应用程序使用类似于db_file.yml的配置,但这是因为Spring已经理解了这种语法,并且知道它已经从环境变量中获取了值。请确保您的框架也支持这一点。
HOST=1.2.3.4
USER=sa
PASSWORD=42
PORT=4242
DB_NAME=mydb
docker-compose up