当前位置: 首页 > 面试题库 >

如何使用docker-compose v3.1管理机密值?

齐学文
2023-03-14
问题内容

docker-
compose.yml规范的3.1版引入了对secrets的支持。

我尝试了这个:

version: '3.1'

services:
  a: 
    image: tutum/hello-world
  secret: 
    password: the_password
  b:
    image: tutum/hello-world

$ docker-compose up 返回

Unsupported config option for services.secret: 'password'

我们如何在实践中使用机密功能?


问题答案:

您可以阅读官方文档中的相应部分。

要使用机密,您需要在docker- compose.yml文件中添加两件事。首先,一个secrets:定义所有机密的顶级块。然后,另一个secrets:每个服务下块,它指定
秘密服务应该接收。

作为示例,创建Docker将理解的两种类型的秘密: 外部 秘密和 文件 秘密。

1.使用以下命令创建“外部”秘密 docker secret create

第一件事:要在Docker上使用机密,您所在的节点必须是集群的一部分。

$ docker swarm init

接下来,创建一个“外部”秘密:

$ echo "This is an external secret" | docker secret create my_external_secret -

(请确保在最后加上破折号-。很容易错过。)

2.将另一个秘密写入文件

$ echo "This is a file secret." > my_file_secret.txt

3.创建docker-compose.yml同时使用两个秘密的文件

现在已经创建了两种类型的机密,下面是docker-compose.yml将读取这两种机密并将其写入web服务的文件:

version: '3.1'

services:
  web:
    image: nginxdemos/hello
    secrets:                    # secrets block only for 'web' service
     - my_external_secret
     - my_file_secret

secrets:                        # top level secrets block
  my_external_secret:
    external: true
  my_file_secret:
    file: my_file_secret.txt

Docker可以从自己的数据库(例如使用制成的秘密docker secret create)或文件中读取秘密。上面显示了两个示例。

4.部署测试堆栈

使用以下方法部署堆栈:

$ docker stack deploy --compose-file=docker-compose.yml secret_test

这将创建一个web名为的服务实例secret_test_web

5.验证由服务创建的容器具有两个秘密

使用docker exec -ti [container] /bin/sh验证的秘密存在。

(注意:在下面的docker exec命令中,该m2jgac...部分在您的计算机上将有所不同。运行docker ps以查找您的容器名称。)

$ docker exec -ti secret_test_web.1.m2jgacogzsiaqhgq1z0yrwekd /bin/sh

# Now inside secret_test_web; secrets are contained in /run/secrets/
root@secret_test_web:~$ cd /run/secrets/

root@secret_test_web:/run/secrets$ ls
my_external_secret  my_file_secret

root@secret_test_web:/run/secrets$ cat my_external_secret
This is an external secret

root@secret_test_web:/run/secrets$ cat my_file_secret
This is a file secret.

如果一切顺利,我们在步骤1和2中创建的两个秘密应该位于web部署堆栈时创建的容器内。



 类似资料:
  • 是否有任何可能的方法,我可以更新AWS秘密管理器中的密钥/值,而不必检索当前值,然后更新它们? 我找到的当前解决方案首先从secrets Manager中检索值: 但我不想检索秘密值。首选语言是Python。

  • 在https://KeyCloak.gitbooks.io/server-developer-guide/content/v/2.2/topics/admin-rest-api.html中使用CURL的示例适用于从其Docker映像运行KeyCloak。 为了实现应用程序的最终目标形状,我希望使用客户端ID和机密而不是用户名+密码进行身份验证。 该令牌会导致对admin REST API的调用出现

  • 一些秘密需要通过PODS获取,秘密存储在GCP秘密管理器中,什么是安全有效的方法来获取pod中的秘密? 谢谢你!

  • 对此有以下查询: 是否可以知道lambda函数缓存这些秘密的位置? 如果talend作业执行时机密发生更改,如何确保talend作业将更新后的值用于机密? 如何确保正在使用机密的最新值。

  • 试图通过管理员更改我的数据库密码。在尝试登录时突然更新密码不起作用。如何重置管理员数据库密码。

  • 我目前正在将我的docker部署迁移到k8s清单,我想知道如何处理秘密。目前,我的docker容器获取/run/secrets/app_secret_key以env-var的形式获取容器内的敏感信息。但与k8s机密处理相比,这有什么好处吗?因为在另一方面,我也可以在我的声明中这样做。yaml: 然后直接将秘密作为env变量放入容器中...我能够注意到的唯一区别是,如果我在容器内提取/run/sec