【问题标题】:How to read external secrets when using docker-compose使用 docker-compose 时如何读取外部机密
【发布时间】:2018-10-01 23:47:52
【问题描述】:

我想知道如何将外部机密传递到由 docker-compose 生成的服务中。我执行以下操作:

我创建了新的秘密

printf "some secret value goes here" | docker secret create wallet_password -

我的 docker-compose.yml:

version: "3.4"
services:
  test:
    image: alpine
    command: 'cat /run/secrets/wallet_password'
    secrets: 
    - wallet_password

secrets:
  wallet_password:
    external: true

然后我运行:

docker-compose -f services/debug/docker-compose.yml up -d --build

docker-compose -f services/debug/docker-compose.yml up

我收到以下回复:

WARNING: Service "test" uses secret "wallet_password" which is external. External secrets are not available to containers created by docker-compose.
WARNING: The Docker Engine you're using is running in swarm mode.

Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.

To deploy your application across the swarm, use `docker stack deploy`.

Starting debug_test_1 ...
Starting debug_test_1 ... done
Attaching to debug_test_1
test_1  | cat: can't open '/run/secrets/wallet_password': No such file or directory

Sooo.... 有没有办法将外部机密传递到由 docker-compose 生成的容器中?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    您需要运行 swarm。事情是这样的:

    创建一个群体:

    docker swarm init

    创建您的秘密(尽可能多):

    docker secret create <secret_name> <secret_content>

    检查所有可用的秘密:

    docker secret ls

    现在,使用 docker-compose 作为服务的先驱:

    docker stack deploy --compose-file <path_to_compose> <service_name>

    请注意,您会在位于 /run/secrets/<secret_name> 的纯文本文件中找到您的秘密。

    【讨论】:

      【解决方案2】:

      没有。

      外部机密对 docker-compose 创建的容器不可用。

      错误消息很好地总结了它。 Secrets 是 swarm 模式的功能,秘密存储在 swarm manager 引擎中。该管理器不会将这些秘密暴露给外部启动的容器。只有带有密钥的 swarm 服务才能运行加载了密钥的容器。

      您可以在 swarm 模式下运行服务来提取秘密,因为它只是容器内的一个文件,而容器内的应用程序可以简单地 cat 提取文件内容。您还可以通过将文件作为卷安装在机密位置中来复制以 compose 启动的容器中机密的功能。为此,您需要一个单独的撰写文件,因为卷挂载和秘密挂载会相互冲突。

      【讨论】:

      • 如果外部机密对 docker-compose 创建的容器不可用。那么为什么 docker-compose 3.* 具有以下语法? ```秘密:我的秘密:外部:名称:一些名称```
      • @yuklia 因为您在 swarm 模式下使用与 docker-compose 相同的 compose 文件语法。但并非所有功能都可用。
      • 那么在 docker-stack 中真的没有使用外部机密的选项吗?
      • 不关注问题。 Swarm 模式是您部署 Docker 堆栈的方式,而 Swarm 模式是您可以使用机密的地方。您不使用 docker-compose 部署 docker 堆栈。
      猜你喜欢
      • 2021-08-14
      • 1970-01-01
      • 2022-08-22
      • 2016-04-28
      • 2017-10-22
      • 2019-10-30
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      相关资源
      最近更新 更多