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