我一直在尝试使用Docker Composer文件设置Vault。我有三个要求,
1.确保创建的密码和其他配置在容器重新启动后保持不变
1.应该能够访问Vault的Web用户界面
1.使用生产模式启动Vault
我尝试了这两个配置部分。
vault-server:
image: vault:latest
ports:
- "8204:8200"
environment:
VAULT_ADDR: "http://0.0.0.0:8204"
VAULT_DEV_ROOT_TOKEN_ID: "vault-plaintext-root-token"
cap_add:
- IPC_LOCK
volumes:
- ./vault/logs:/vault/logs
- ./vault/file:/vault/file:rw
vault_dev:
hostname: vault
container_name: vault
image: vault:latest
environment:
VAULT_ADDR: "http://0.0.0.0:8205"
VAULT_DEV_ROOT_TOKEN_ID: "vault-plaintext-root-token"
VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:8205"
ports:
- "8205:8200"
volumes:
- ./vault/files:/vault/file:rw
cap_add:
- IPC_LOCK
entrypoint: vault server -dev
我的问题是;
- 通过Vault服务器配置,我可以使用URL http://localhost:8204/ui/访问Vault UI,但重新启动后不会保留创建的密码
- 使用vault_dev配置(我认为删除-dev命令后,该配置将帮助我在生产模式下启动Vault)时,我无法访问url为http://localhost:8205/ui/的Vault UI
我真的不明白这两个配置段之间的区别是什么,以及如何实现步骤1和3。对于持久化,因为它说我们需要添加一个卷,我尝试挂载文件路径,但当容器重新启动时,内容仍然消失。在一些文档中,它说,在开发模式下,你不能使它持久化,必须在生产模式下运行。但我,无法确定如何修改vault-server配置集以使其在生产模式下运行。
感谢,如果有人可以帮助,因为我已经经历了几个链接在过去几天和种迷失的时刻。
2条答案
按热度按时间am46iovg1#
我认为导致您出现问题的原因是
VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:8205"
。这会导致Vault侦听端口8205而不是默认的8200。因此,执行此操作时,需要Map端口8205而不是8200。如下所示
但是当你在一个容器中运行的时候,几乎没有任何理由改变容器中的端口号,因为通常只有一个进程在运行,所以它不会与任何东西发生冲突,所以我只让它监听默认的8200,并将它Map到主机上的8205。
我看了VAULT_ADDR的文档,我认为您也应该删除它,除非您有多个Vault节点,并且在它们前面有一个负载平衡器。
所以你最终会得到
则应可在
http://localhost:8205/ui
上访问Vault。olhwl3o22#
如果您查看Docker Hub page for the
vault
image文档:运行不带参数的Vault容器将为您提供development mode的Vault服务器。
/vault/file
[用于]在使用file
数据存储插件时写入持久存储数据。默认情况下,此处不写入任何内容(dev
服务器使用内存中的数据存储);启动容器之前,必须在Vault的配置中启用file
数据存储后端。(在评论中描述这种行为的H/T @ ChrisBecker;它也在well-commented Dockerfile中。)
在该页面的后面是一个名为“在服务器模式下运行Vault以进行开发”的部分。这里的关键点是,您需要显式地提供一个
command: vault server
,以使其不会在开发模式下启动。@HansKilian的answer on port setup在这里也很重要,结合这个答案的简化和需要显式运行
vault server
而不需要-dev
,你应该得到如下的结果:JSON块是从文档中复制的,文档还说明了
不建议在生产环境中禁用TLS并使用
file
存储后端。底层Vault存储无法从主机进行有效访问(如果没有其他内容,它是加密的),我选择将其存储在命名的Docker卷中。
由于它不是在开发模式下运行,您需要完成初始化Vault的步骤,这将为您提供一组关键凭据,然后您需要创建用户身份并将凭据添加到Vault。听起来您并不希望在这里进行全自动安装,因此请注意,有些手动步骤涉及一些“不,真的不要丢失这些密钥”输出。