当我重新启动 docker compose 时,Hashicorp Vault 容器不会将我的机密保存在本地卷上

Edu*_*lde 3 docker docker-compose hashicorp-vault vault

简而言之,在我放置docker-compose down并重新部署它之后,我正在努力将保存在本地计算机的保管库容器中的数据保留下来docker-compose up -d,数据丢失了。我将向您展示我的.yml看起来如何非常简单:

version: '3.7'

services:
  vault_dev:
      image: vault:latest
      volumes:
        - vault-file:/vault/file
      ports:
        - "8200:8200/tcp"
      environment:
        VAULT_DEV_ROOT_TOKEN_ID: 'root'
        VAULT_DEV_LISTEN_ADDRESS: '0.0.0.0:8200'
      cap_add:
        - IPC_LOCK
      container_name: vault_dev
      entrypoint: "vault server -dev"

volumes:
     vault-file: {}
Run Code Online (Sandbox Code Playgroud)

ixe*_*013 5

当 Vault 使用该-dev选项启动时,它仅将机密存储在内存中。当它关闭时,它们就会丢失。与 Docker 无关。

您可能希望删除-devDockerfile 入口点中的选项并使用file配置文件中的存储选项。


lub*_*ben 5

在 docker-compose 中使用生产 Vault 服务器进行本地开发不是,因为您必须经常解封它,通常是每次重新启动容器时。

我发现使用 Vault dev更容易服务器模式与一个额外的引导容器(根据需要初始化 Vault 状态)要容易得多。

以下是具体操作方法。首先在 compose 中定义 Vault Dev Server。

  • 是自动解封的
  • 它有 Vault UI,可访问http://localhost:8200/ui/vault它具有可从您的开发计算机
  • 它具有预定义的根令牌,其值为“root”,可以将其提供给需要与 Vault 通信的服务

docker-compose.yml

vault:
    hostname: vault
    container_name: vault
    image: vault:1.12.0
    environment:
      VAULT_ADDR: "http://0.0.0.0:8200"
      VAULT_API_ADDR: "http://0.0.0.0:8200"
    ports:
      - "8200:8200"
    volumes:
      - ./volumes/vault/file:/vault/file:rw
    cap_add:
      - IPC_LOCK
    entrypoint: vault server -dev -dev-listen-address="0.0.0.0:8200" -dev-root-token-id="root"
Run Code Online (Sandbox Code Playgroud)

现在保险库已准备好使用,但它是空的 - 没有启用密钥或其他秘密引擎。为了填充必要的数据,我使用第二个容器,该容器仅启动一次,并启用/创建将在我的工作期间使用的引擎/密钥。

docker-compose.yml

  vault-init:
    container_name: vault-init
    image: vault:1.12.0
    volumes:
      - ./vault-init.sh:/vault-init.sh
    depends_on:
      - vault
    restart: "no"
    entrypoint: sh -c "/vault-init.sh"
Run Code Online (Sandbox Code Playgroud)

该容器正在执行vault-init.sh我在目录中准备的脚本(在本示例中,它与 docker-compose 文件的目录相同,但您可以将其放在另一个目录中并更改安装路径)。该脚本执行以下步骤:

  • 登录保险柜
  • 启用 Vault 传输引擎
  • 在引擎内创建两个具有特定名称和类型的密钥
#! /bin/sh

set -e

export VAULT_ADDR=http://vault:8200

# give some time for Vault to start and be ready
sleep 3

# login with root token at $VAULT_ADDR
vault login root

# enable vault transit engine
vault secrets enable transit

# create key1 with type ed25519
vault write -f transit/keys/key1 type=ed25519

# create key2 with type ecdsa-p256
vault write -f transit/keys/key2 type=ecdsa-p256
Run Code Online (Sandbox Code Playgroud)

启动后,docker-compose up -d您可以使用浏览器打开 Vault UI 并验证 Vault 是否处于您想要的状态:http://localhost:8200/ui/vault