一千萬個為什麽

搜索

一共有 2 個回答:

這是我在這種情況下使用的解決方案 - 我使用 Ansible 來管理Docker容器,並 Ansible Vault 存儲這些容器的機密。

Ansible Playbook運行MongoDB容器

您的 playbook.yml 可能如下所示:

- name: run mongodb docker container
  docker_container:
    name: mongo-container
    image: mongo
    ports:
      - "27017:27017"
    env:
      MONGO_INITDB_DATABASE: "{{secret_db_name}}"
      MONGO_INITDB_ROOT_USERNAME: "{{secret_db_user}}"
      MONGO_INITDB_ROOT_PASSWORD: "{{secret_db_pass}}"
  • 您可能會註意到, docker_container 語法看起來很像你在Docker Compose YML文件中編寫的內容。
  • 區別在於您的機密是在變量中管理的( {{}}Ansible Jinja2變量)。
  • 以下是與Docker交互的 Ansible Modules 列表。

用於管理 mongodb 機密的Vault文件

vault.yml 文件將以加密形式包含您的機密的定義。

secret_db_name: foodb
secret_db_user: foo
secret_db_pass: [email protected]

您可以使用 ansible-vault 命令來創建加密文件(例如在版本控制中)。

把它們放在一起

如果要運行Docker容器,可以運行Ansible命令

ansible-playbook playbook.yml --ask-vault-pass

這將

  • 詢問您的保管庫密碼文件,
  • 解密文件庫文件並將變量傳遞給劇本;
  • 使用您的秘密憑據運行docker mongodb容器

同時確保您的憑據不會公開顯示。

筆記

  • 我已經使用這種方法以聲明方式在遠程托管服務器上配置Dockerized數據庫。
  • 你引入了另一個工具,一個圍繞Docker的'包裝器'。根據我的經驗,DevOps 工具鏈比使用單一工具更有效。但是,這可能會也可能不會成為您的約束。

內置了對mongo的秘密支持。你可以看到圖像的入口點腳本,如果您將 _FILE 添加到用戶名/密碼值的末尾,它將從這些秘密文件中提取。

至於.js文件,如果你將解密密碼存儲在這些文件中,你需要制作一個自定義入口點腳本或者需要傳入的envvars,以便使用哪些秘密並運行 jqsed 對文件進行替換我猜。您可以將.js文件本身存儲在一個秘密中,只要它小於500Kb(秘密的最大大小)。