是的(但实际上不是)

是的(但实际上不是)

目前,我们在单个 docker 容器上运行应用程序,该应用程序需要将各种敏感数据作为环境变量传递,

我把它们放在运行命令中,这样它们就不会出现在图像中,也不会出现在存储库中,但我最终得到了一个非常不安全的运行命令,

现在,我明白了 docker 秘密是存在的,但是,如何在不部署集群的情况下使用它们?或者还有其他方法可以保护这些数据吗?

此致,

答案1

你不能……没有 Swarm 就不支持秘密。除非“可能”你只使用一个节点“Swarm”。

我认为另一个解决方案是使用第三方保险库软件,例如这个:

https://www.vaultproject.io/

但是,要使用 Vault 容器中的秘密,您需要阅读文档。

希望这会为您指明正确的起点。

答案2

是的,如果你使用撰写文件。(您不需要运行群)。

您可以使用 Compose 文件docker-compose: 有docker-compose.yml 文件中“secrets”的文档

我改用 docker-compose 是因为我想使用 secrets。我很高兴我这么做了,它看起来更简洁。每个服务都映射到一个容器。如果你想改用 swarm,你基本上已经做到了。

注意:机密信息不会加载到容器的环境中,而是挂载到 /run/secrets/

以下是一个例子:

1)项目结构:

|
|---    docker-compose.yml
|---    super_duper_secret.txt

2)docker-compose.yml内容:

version: "3.6"

services:

  my_service:
    image: centos:7
    entrypoint: "cat /run/secrets/my_secret"
    secrets:
      - my_secret

secrets:
  my_secret:
    file: ./super_duper_secret.txt

3)super_duper_secret.txt内容:

Whatever you want to write for a secret really.

4)从项目的根目录运行此命令以查看容器是否确实有权访问您的机密(Docker 必须正在运行并且安装了 docker-compose):

docker-compose up --build my_service

您应该看到您的容器输出您的秘密。

答案3

是的(但实际上不是)

目前,如果你不在 Swarm 中,Docker 不支持配置和机密

docker compose 规范包含配置和机密撰写规范

那么它是如何工作的?

事实上创建 docker 卷让你相信这个功能是存在的,更具体地说,它是一个绑定挂载

在此处输入图片描述

如果您想远程部署您的应用程序,那么与 Swarm 有很大不同!

例子

services:
  test:
    image: alpine
    secrets:
      - source: my_secret
secrets:
  my_secret:
    file: $PWD/secret

与此相对相同

services:
  test:
    image: alpine
    volumes:
      - $PWD/secret:/run/secrets/my_secret:ro

如果你使用 if 查看你的卷docker inspect <container>并且使用 secret,你会发现你的 secrets 只是本地绑定卷

相关内容