我有用 Golang 编写的 rest api,它使用 AWS SES 发送电子邮件。当我使用 docker 在本地部署 api 时,电子邮件将通过本地主机环境中的 SES 发送。现在我已经为 api 编写了集成测试,它在本地系统中完美运行,并且所需的 aws 凭证也放置在默认位置
".aws/credential"
。我在 github repo 中放置了源代码。我希望这个集成测试能够针对每个提出的 PR 执行,为此我也设置了 github 操作。所有 api 都在 github 中工作,除了使用 AWS SES 的那个,因为它没有可用的 aws 凭证。我已经尝试了几种方法来在 github 中提供 aws creds 而不公开它们,但到目前为止没有任何效果。因此需要一些关于如何做到这一点的帮助。
您的应用程序找不到凭据,因为 它存储在主机的
.aws/credential
路径中,而不是在您的容器中.
有几种解决方案可用于解决此特定问题,其中之一是简单地将
.aws/credential
从您的主机安装到您的 docker 容器。
docker run -v ${HOME}/.aws/credentials:/root/.aws/credentials:ro ...
或者如果您使用的是 docker-compose:
version: '3'
services:
app:
image: your_image
volumes:
- ${HOME}/.aws/credentials:/root/.aws/credentials:ro
然而,上述解决方案并不是最好的,因为从安全角度来看它是有风险的。
我建议将凭据作为环境变量传递。