docker-compose 相当于 Docker Build --secret 参数

2024-02-11

我们已经使用了该技术详细信息在这里 https://pythonspeed.com/articles/docker-build-secrets/以安全的方式将主机环境变量公开给 Docker 构建。

# syntax=docker/dockerfile:1.2
FROM golang:1.18 AS builder

# move secrets out of the build process (and docker history)
RUN --mount=type=secret,id=github_token,dst=/app/secret_github_token,required=true,uid=10001 \
    export GITHUB_TOKEN=$(cat /app/secret_github_token) && \
    <nice command that uses $GITHUB_TOKEN>

这个命令来构建图像:

export DOCKER_BUILDKIT=1
docker build --secret id=github_token,env=GITHUB_TOKEN -t cool-image-bro .

以上效果完美。

现在我们还有一个在 CI 中运行的 docker-compose 文件需要修改。但是,即使我确认该作业中存在 ENV 变量,我也不知道如何将环境变量分配给github_token命名为秘密 ID。

换句话说,可以接受具有秘密 ID 的环境变量映射的等效 docker-compose 命令(up --build 或 build)是什么?


事实证明我有点领先于时代。 docker compose v.2.5.0 带来支持秘密 https://github.com/docker/compose/releases/tag/v2.5.0.

按照上面的说明修改 Dockerfile 后,我们必须将 docker-compose 更新为定义的secrets.

docker-compose.yml

services:
  my-cool-app:
    build:
      context: .
      secrets:
        - github_user
        - github_token
...
secrets:
  github_user:
    file: secrets_github_user
  github_token:
    file: secrets_github_token

但那些文件在哪里secrets_github_user and secrets_github_token来自(哪里?在 CI 中,您还需要导出环境变量并将其保存到默认机密文件位置。在我们的项目中我们是使用任务 https://taskfile.dev/#/所以我们也添加了这些行。

请注意,我们正在从 CI 运行此任务,因此您可以在没有任务的情况下以不同的方式执行此任务。

- printenv GITHUB_USER > /root/project/secrets_github_user
- printenv GITHUB_TOKEN > /root/project/secrets_github_token

然后我们更新 CircleCI 配置并向我们的作业添加两个环境变量:

.config.yml

  name-of-our-job:
    environment:
      DOCKER_BUILDKIT: 1
      COMPOSE_DOCKER_CLI_BUILD: 1

您可能还需要更新的 Docker 版本,我认为他们在 19 年底或 20 年初发布了它。我已经使用过它并且它有效:

    steps:
      - setup_remote_docker:
          version: 20.10.11

现在,当运行基于 docker-compose 的命令时,秘密应该通过 docker-compose 成功安装,并且可用于正确构建或运行 Dockerfile 指令!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker-compose 相当于 Docker Build --secret 参数 的相关文章

随机推荐

  • ReferenceError:ReactJS Build 中未定义 localStorage

    我在 React 应用程序中的经过身份验证的组件上大量使用 localStorage 以从本地存储获取用户详细信息并在登录时存储它们 当我构建我的应用程序时 它会抛出ReferenceError localStorage is not de
  • RxJava API 和 Java 9 Flow API 之间的区别

    在过去几个主要版本的 Java 的每次迭代中 似乎都有一致的新方法来管理并发任务 在 Java 9 中 我们有Flow API https docs oracle com javase 9 docs api index html java
  • R dplyr mutate_at 访问 colnames

    如何访问正在处理的列名dplyr mutate at 假设我们想要将数据框的列转换为因子 其级别存储在单独的列表中 df lt data frame C1 c A B C C2 c D E F df C1 C2 1 A D 2 B E 3
  • suffix(from:) 和 dropFirst(_:) 之间有什么区别吗?

    我突然想到 在 Swift 中处理子序列时 func suffix from Int 似乎与刚才相同dropFirst 显然 对于长度为 10 的数组 只需将输入值从 3 更改为 7 即可 只是重复一遍 所以 当然 对于一系列的说法长十 我
  • Python 中 switch/case 的语法等价物是什么? [复制]

    这个问题在这里已经有答案了 Programming languages like C C C Java JavaScript and Pascal Reference https en wikipedia org wiki Switch s
  • 删除 Github 上使用 提交的

    我在 github 上有一些提交 如下所示 有没有一种方法可以重新设置基准 以便我可以摆脱这个问题并简单地将提交标记为由我标记 首先我会检查你的 git 是否配置了正确的用户信息 跑步git config list以验证一切是否正确 您还可
  • 自动部署到 F5 负载平衡环境

    我们目前正在使用 TeamCity 进行 CI 构建 并且我们也在尝试设置自动化部署 我当前尝试部署的项目是位于 F5 负载均衡器下的 Windows 服务 将来 我们还希望自动化部署同样位于 F5 下的 IIS 网站 从 TeamCity
  • jquery mobile 外部面板不采用样式

    我正在尝试实现 jQuery mobile 1 4 rc1 中提供的新外部面板 我能够让面板按其应有的方式在所有页面上输入和关闭 但是面板不会继承默认主题 c 的样式 如果使用 data theme a 定义主题也不会继承样式 面板将加载无
  • 从剪贴板保存图像

    我想将 winrt 中剪贴板内的一张图像保存到文件中 但我没有找到办法 你能帮忙吗 var dataPackage Clipboard GetContent var t await dataPackage GetBitmapAsync va
  • 使用 jquery 的 ajax 调用中未设置 HTTP_X_REQUESTED_WITH

    我正在使用 Django 开发一个新网站 我遇到了 ajax 请求的问题 我一直在谷歌上搜索并阅读了很多帖子和文章 大多数都解释相同 问题 ajax 调用已执行 我在视图中收到了请求 但 request is ajax 返回 false 据
  • Vagrant、VirtualBox - 找不到适配器?

    输入 vagrant up 时获取以下日志转储 已尝试在 VirtualBox 上没有任何混乱 并且还手动添加端口转发规则 主机 IP 127 0 0 1 主机端口 2222 访客端口 22 Bringing machine polecat
  • OpenCV.js - 检测MultiScale“无法捕获此异常”

    我正在尝试通过 OpenCV js 使用面部识别 但是当我调用detectMultiScale 的方法CascadeClassifier对象我收到错误 未捕获 6446128 异常捕获已禁用 无法捕获此异常 使用 s DISABLE EXC
  • 使用 Spring Profile 加载 util:properties 会导致 ID 多次出现

    我正在使用 Spring 3 1 配置文件通过 util properties 加载属性文件
  • 如何重启BluetoothLeScanner?

    我正在使用 Android 端的 BluetoothLeScanner 将 Android 设备连接到 iOS 第一次一切都完美无缺 问题是 在我连接到其中一台已发现的 iOS 设备后 我停止扫描 stopScan scanCallback
  • 如何将集合转换为 pandas 中的列表? [复制]

    这个问题在这里已经有答案了 我有这样的数据 name SF a 1 23 4 5 b 1 3 43 5 c 1 23 24 5 d 1 23 54 15 我想让SFset to list我期望的输出是 name SF a 1 23 4 5
  • 单一责任原则的例子是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有人可以给我一个单一责任原则的例子吗 我试图理解在实践中 一个班级承担单一责任意味着什么 因为我担心我可能每天都会违反这条规则 破坏应
  • 在 AWS Lambda 上使用层时“无法从 'urllib3.util.ssl_' 导入名称 'DEFAULT_CIPHERS'”

    我想要实现什么 使用 AWS Lambda 抓取网站并将数据保存在 S3 上 我遇到的问题 当我执行 Lambda 时 出现以下错误消息 errorMessage 无法导入模块 lambda function 不能 从 urllib3 ut
  • 从子 @Input setter 访问提供者方法 - Ionic2 / Angular2

    我正在尝试从我的组件访问提供程序类 Input方法 然而 当 Input方法被称为 以下是我的代码 provider import Injectable from angular core import rxjs add operator
  • Django 无法导入本地设置

    编辑 尝试 Django 1 7 和 Python 3 使用manage py时 我似乎无法将local settings py导入到我的settings py文件中 如果我直接执行 settings py 文件 我的 local sett
  • docker-compose 相当于 Docker Build --secret 参数

    我们已经使用了该技术详细信息在这里 https pythonspeed com articles docker build secrets 以安全的方式将主机环境变量公开给 Docker 构建 syntax docker dockerfil