gpt4 book ai didi

linux - 在 sed 正则表达式中使用 docker --build-arg

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:11 26 4
gpt4 key购买 nike

作为我的 Dockerfile 构建的一部分,我正在尝试使用 sed 来替换我的 package.json 文件的一部分。以下命令适用于常规 linux 命令行(在我的主机上):

export GITHUB_TOKEN=MySecretToken && sed -i -E "s/git\+ssh:\/\/git/git\+https:\/\/${GITHUB_TOKEN}:/g" package.json

这很好用,而且可以解决问题。然后我尝试在 dockerfile 中做同样的事情:

ARG TOKEN
RUN export GITHUB_TOKEN=$TOKEN && sed -i -E "s/git\+ssh:\/\/git/git\+https:\/\/${GITHUB_TOKEN}:/g" package.json

然后当我构建它时: $ docker build --build-arg TOKEN=MySecretToken 。

失败并显示以下错误消息:sed:-e 表达式 #1,字符 42:“s”的未知选项

感谢所有帮助

最终编辑:当前状态我仍然无法在我的主机上使用 docker 让它工作,但我在 GCP 虚拟机上尝试过,它实际上可以正常工作。我的 Linux 虚拟机和 Windows 机器之间可能存在一些与复制粘贴相关的问题。对不起,如果是这样的话,我很感激我得到的答案和评论。

编辑:我对这种方法的安全性有些担忧,所以我会尝试澄清:

我的意思是在构建时插入此 token ,而不是在运行时。原因是我们在 package.json 中使用私有(private) git repos 作为依赖项。要在构建容器中不设置 git 的情况下安装这些,我们可以使用 github deploy-token。我们计划使用 Google Cloud Build 构建我们的构建,并加密此 token 。在构建期间(在同一个构建步骤中)我们计划:

  • 复制原始 package.json
  • 解密 token
  • 使用 sed 将我们的 package.json 的一部分替换为解密后的 token
  • 运行 npm 安装
  • 将篡改的package.json替换为原来的package.json

这也只是多阶段构建中第一个构建步骤的一部分。最终图像(及其 docker 历史记录)将仅包含已编译的应用程序,不包含构建时依赖项(如源代码目录、package.json),也不包含任何 token 的痕迹(既未加密也未解密)。

有关类似方法的博客文章,请参阅 https://medium.com/@kevinsimper/how-we-do-docker-multi-stage-builds-and-secure-sharing-of-private-repositories-956eda84f3b8

最佳答案

ARG 在构建时传递参数时使用,例如:

docker build -t mydocker \
--build-arg TOKEN=MySecretToken .

我假设您想在图像启动时传递该 token ,因此您应该将该参数作为环境参数传递,这样您就可以重用相同的容器但传递不同的 token 。同时在 entrypoint.sh 中注入(inject) package.json 中的 token

docker run -d --rm --name mydoc -e GITHUB_TOKEN=MySecretToken mydocker

这样的话,GITHUB_TOKEN会成为环境变量的一部分,很好。

当然在 entrypoint.sh 中你可以做替换:

#!/bin/bash

sed -i -E "s/git\+ssh:\/\/git/git\+https:\/\/${GITHUB_TOKEN}:/g" package.json
...

我的建议是根本不传递该 token ,我假设您计划在容器内运行 npm install,并在其他容器(缓存容器)中生成 node_modules 并将 node_module 文件夹复制到您的容器中。通过这种方式,您根本不会暴露您的 token 。

关于linux - 在 sed 正则表达式中使用 docker --build-arg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51631752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com