docker - Docker secret 挂载一个空字符串
问题描述
我有一个 docker 服务(在 swarm 内),它使用两个秘密作为环境变量(证书的签名证书和密码)
秘密是使用以下命令创建的:
docker secret create signing-certificate signing-certificate.pfx
echo "mypassword" | docker secret create signing-certificate-password -
docker-compose.yml:
version: '3.7'
secrets:
signing-certificate:
external: true
signing-certificate-password:
external: true
services:
login:
image: registry.mydomain.com/login:latest
secrets:
- signing-certificate
- signing-certificate-password
environment:
- KeyFilePath=/run/secrets/signing-certificate
- KeyFilePassword=/run/secrets/signing-certificate-password
在 (.netcore-) 服务中,我使用以下代码检索变量:
var certPassword = Environment.GetEnvironmentVariable("KeyFilePassword");
var certPath = Environment.GetEnvironmentVariable("KeyFilePath");
证书本身工作得很好,并且存在于服务中。问题是密码:它是一个空字符串。
如果我将 docker-compose 更改为此它可以正常工作:
environment:
- KeyFilePath=/run/secrets/signing-certificate
- KeyFilePassword=mypassword
所以我怀疑安装飞机文本秘密有些奇怪。
我还尝试了这些命令来创建秘密:
echo mypassword | docker secret create signing-certificate-password -
echo 'mypassword | docker secret create signing-certificate-password -
printf mypassword | docker secret create signing-certificate-password -
知道我在做什么错吗?或者它可能是一个错误?
Docker-Version: 19.03.8
Kernel Version: 4.15.0-96-generic Operating
System: Ubuntu 18.04.4 LTS
解决方案
如何Environment.GetEnvironmentVariable
处理换行符?使用echo
将\n
在您的密码末尾添加一个,这会混淆某些系统。
cat /run/secrets/signing-certificate-password
您可以通过运行并查看输出和提示符之间是否有换行符来确认这一点。
如果这是问题,使用echo -n ..
应该可以解决它。
推荐阅读
- amazon-web-services - Bitbcuket 服务器与 AWS API 网关/Lamda 集成
- javascript - 为什么递归深度相等检查比 Javascript 中的迭代版本更快?
- amazon-web-services - 是否可以从另一个账户使用 IAM 角色访问 Redshift?如何?
- sql-server - 如何将多个更新语句组合成一个更新语句?
- bash - Jenkins 和 SonarQube 用于管道门控,而不在 bash 中使用 SonarQube Jenkins 插件
- python - Pytest 夹具不会在测试之间拆除对象,即使范围设置为功能
- freemarker - 在 Freemarker 中检测和使用可为空值的问题
- spring-boot - 在一个 spring 应用程序中连接多个 GCloud SQL DB 或 GCloud 和本地 DB
- flutter - TextFormField 失去价值
- c++ - 使用 Blinn-Phong 计算光线追踪器上像素的漫反射 r、g、b 值