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返回:
services.secret的不支持的配置选项:’password’
我们如何在实践中使用秘密功能?
最佳答案
你可以阅读corresponding section from the official documentation.
要使用秘密,您需要在docker-compose.yml文件中添加两件事.首先,定义所有秘密的顶级秘密:块.然后,另一个秘密:在每个服务下阻止服务应该接收的秘密.
例如,创建Docker将会理解的两种类型的秘密:外部秘密和文件秘密.
1.使用docker secret创建一个“外部”秘密
第一件事:使用Docker的秘密,你所在的节点必须是群集的一部分.
$docker swarm init
接下来,创建一个“外部”秘密:
$echo "This is an external secret" | docker secret create my_external_secret -
(确保包括最后的破折号,– 很容易错过.)
将另一个秘密写入文件
$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创建的秘密)或从文件读取秘密.上面显示了两个例子.
4.部署测试堆栈
使用以下方式部署堆栈:
$docker stack deploy --compose-file=docker-compose.yml secret_test
这将创建名为secret_test_web的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容器中.