Podman 允许使用秘密。这允许您在运行容器时将敏感值(例如凭据或 API 密钥)传递到容器,但将它们排除在提交或导出之外。
到目前为止,我一直在使用以下格式包含一个带有凭据的配置文件作为容器内的秘密配置文件。
podman secret create my_creds /path/to/my/credfile.txt
podman run ... --secret=my_creds,mode=0400 ... container --credentials /run/secrets/my_creds
但现在我面临着一个容器,它迫使我要么将凭据包含在一个大的配置文件中(我不想完全秘密地存储),要么通过环境变量包含凭据。
Podman 确实可以选择将机密作为环境变量导入到容器中。 但是,我需要导入的凭据列表非常大,因此我需要添加很多行来在我的服务文件中创建机密。
所以我现在的问题是:有没有办法获取包含存储为
KEY=VALUE
的秘密的文件并将每一行作为秘密环境变量导入到 podman 容器中?
编辑:
目前我整理了以下解决方案
ExecStartPre=-for l in $(cat /path/to/my/credfile.txt); do \
echo $l | cut -d'=' -f 2 | /usr/bin/podman secret create $(echo $l | cut -d'=' -f 1 -) -; done
ExecStopPost=-for l in $(cat /path/to/my/credfile.txt); do \
/usr/bin/podman secret rm $(echo $l | cut -d'=' -f 1 -); done
我仍然需要手动添加所有
--secret=SECRET_NAME,type=env
参数。
如果将机密文件命名为 .env 并使用 podman-compose 而不是 podman run,则应该能够使用 .env 文件中 KEY=VALUE 中的任何 KEY 作为环境变量。
我不久前测试过这个,它有效。
你也可以这样做:
#!/bin/bash
ENVFILE=/my_path/.env
. $ENVFILE
podman run --replace --name=myap -d \
-e MYAPP_VAR1=$KEY1 \
-v $KEY2/file1:/file1:ro \
-v $KEY2/dir1:/dir1:ro \
--net $NETWORKSTRING \
-p 1080:80 \
-p 1443:443 \
docker.io/image_name:latest
我还没有尝试过四元组,但您也应该能够使用 EnvironmentFile= 采取类似的方法。