当前位置: 首页 > 知识库问答 >
问题:

我可以通过挂载目录将AWS凭据提供给由sbt-nate-pack ager构建的本地Docker容器吗

蒋奇
2023-03-14

我们有一些使用 sbt 原生打包程序构建的 Docker 映像,这些映像需要与 AWS 服务进行交互。在 AWS 外部运行它们时,我们需要显式提供凭证。

我知道我们可以显式传递包含 AWS 凭证的环境变量。这样做会使我们的凭据保密变得复杂。一种选择是通过命令行提供它们,通常将它们存储在我们的shell历史记录中(是的,我知道这可以通过在命令的开头添加空格来避免,但这很容易忘记),并将它们置于意外复制/粘贴共享的更高风险中。或者,我们可以通过 env 文件提供它们。但是,这让我们有可能将它们签入版本控制或无意中将它们推送到另一台服务器。

我们发现理想的做法是挂载我们的本地< code>~/。aws/目录放入docker容器的运行用户主目录中。然而,我们试图让它与sbt-native-packager映像一起工作,但没有成功。

与我们的其他映像相比,sbt-nate-Packager映像的一个独特细节是它们是使用docker的ENTRYPOINT而不是CMD来启动应用程序构建的。我不知道这是否与问题有关。

那么问题来了:是否可以通过在启动时通过命令行参数挂载 AWS 凭证文件夹,向由 sbt-本机打包程序创建的 Docker 容器提供 AWS 凭证?

共有2个答案

从劲
2023-03-14

我不太确定为什么要安装< code>~/。aws会是一个问题——通常它可能与该目录上的读取权限以及主机系统和容器之间的不同UID有关。

也就是说,我可以提出几个解决方法

>

  • 使用环境变量文件,而不是在命令行中显式指定它们。在文档管理器运行中,可以通过指定 --env-文件来执行此操作。对我来说,这听起来像是最简单的方法。

    挂载不同的凭据文件,并提供< code>AWS_CONFIG_FILE环境变量来指定其位置。

  • 蒙墨竹
    2023-03-14

    我遇到的问题与权限有关。<代码>。aws文件在我的机器上的访问权限非常有限,sbt-native-packager映像中的默认用户是< code>daemon。当装入容器时,该用户无权读取我的文件。

    我能够通过将以下标志添加到我的 Docker 运行命令来获得我想要的行为: -v ~/.aws/:/根/.aws/ --user=root

    我能够通过在运行以查看 HOME 环境变量(挂载 /.aws/ 文件夹的位置)并尝试对已挂载文件夹的内容进行 cat 时使用 --entrypoint=ash 标志来发现这一点。

    现在,我只需要了解以这种方式运行docker容器会给自己带来哪些安全漏洞。

     类似资料:
    • 问题内容: 我在ubuntu 14.04上运行它,并将其设置为静态ip,然后将其从公共ip路由到防火墙。我试图将我的后端API设置为在docker容器中运行,并且被两件事弄糊涂了。 1.)我如何将ip 映射到容器的ip,以便知道如何将传入的数据包发送到容器(如果可能,动态地)。 2.)如果尚未以这种方式完成,该如何做到这一点,以使我不必在每次重新运行该Docker容器时都进行设置? 提前致谢! 问

    • 问题内容: 在Docker容器中挂载主机目录非常容易。 但是我需要另一种方式。 我使用Docker容器作为开发环境来开发WordPress插件。该Docker容器包含运行WordPress所需的一切(MySQL,Apache,PHP和WordPress)。我从Docker容器中的主机挂载了我的插件src文件夹,以便可以在开发期间测试我的插件。 对于调试,如果我在主机上运行的IDE具有对Docker

    • 假设我有一个应用程序具有这个简单的DockerFile: 然后我运行了一个容器: 所以它工作正常,并将一些日志存储在docker容器的中。 我也看到docker-mount目录从容器到主机,但它并没有解决我的问题我需要一种方法备份我的文件从Docker到主机。

    • 问题内容: docker-compose文件https://docs.docker.com/compose/compose-file/#/volumes- volume-driver 显示了相对于compose文件安装主机子目录的各种方法。 例如: volumes:#只需指定一个路径,然后让Engine创建一个体积-/ var / lib / mysql #指定绝对路径映射-/ opt / dat

    • 问题内容: 我正在尝试为容器提供静态IP地址。我了解我必须创建一个自定义网络。我创建了它,并且桥接接口在主机(Ubuntu 16.x)上已启动。容器从该子网获取IP,但不是我提供的静态IP。 这是我的docker-compose.yml: 容器得到10.5.0.2和10.5.0.3,而不是5和6。 问题答案: 请注意,除非您做的事情允许容器网络从外部路由到内部(例如,macvlan),否则我不建议

    • 我正在尝试向容器提供静态IP地址。我知道我必须创建一个自定义网络。我创建它并且桥接接口在主机(Ubuntu 16. x)上。容器从此子网获取IP,但不是我提供的静态。 这是我的docker-compose.yml: 容器10.5.0.2和10.5.0.3,而不是5和6。