docker - 在 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 具有默认凭据。但是当我运行容器时,我想替换这个文件
解决方案
要调试此尝试运行:
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 文件并从这个文件中注入值
祝你好运
推荐阅读
- ubuntu - dotnet 核心发布问题
- c++ - 如何从 OBJ 文件中正确读取信息并使用它通过 DirectX 11 渲染模型
- android - 如何从 webview 隐藏文本选择句柄:android
- django - 如何在超级简单的 Django 站点上实现 HTTPS
- apex - 我在对象“PrincipalProduit__c”中什么也看不到
- ios - 使用 Http 和任意加载器为真。我可以将应用程序上传到 App Store 吗?
- java - 将子类对象添加到列表创建错误
- asp.net-mvc - Azure Active Directory - 身份验证单租户
- android - Android中使用AlarmManager的多个警报?
- python - 在python的子类中选择性继承