python - 如何在pip的requirements.txt中使用GITHUB_TOKEN而不将其设置为Dockerfile中的环境变量?

标签 python docker

我有一个可以通过 python 的 pip 安装的私有(private)存储库:

需求.txt

git+https://${GITHUB_TOKEN}@github.com/MY_ACCOUNT/MY_REPO.git

还有一个 Dockerfile:

Dockerfile

FROM python:3.8.11

RUN apt-get update && \
    apt-get -y install gcc curl && \
    rm -rf /var/lib/apt/lists/*

ARG GITHUB_TOKEN
COPY ./requirements.txt /tmp/requirements.txt
RUN pip install -r /tmp/requirements.txt

当我构建图像时它运行得非常好:

$ docker 构建 . --build-arg GITHUB_TOKEN=THIS_IS_MY_GITHUB_TOKEN -t wow/my_app:最新

但是当我检查图像时,它在 Cmd 部分显示 GITHUB_TOKEN:

$ docker 镜像检查 wow/my_app:latest


...
"ContainerConfig": {
    ...
    "Cmd": [
        "|1",
        "GITHUB_TOKEN=THIS_IS_MY_GITHUB_TOKEN",     # Here!
        "/bin/sh",
        "-c",
        "pip install -r /tmp/requirements.txt"
    ],
    ...
},
...

我认为这可能会导致安全问题。我该如何解决这个问题,以便任何凭证信息都不会出现在 dockerspect 中?

最佳答案

如果您使用BuildKit构建图像,您可以利用 Docker build secrets .

你可以像这样构造你的 Dockerfile:

FROM python:3.8.11

RUN apt-get update && \
    apt-get -y install gcc curl && \
    rm -rf /var/lib/apt/lists/*

COPY ./requirements.txt /tmp/requirements.txt
RUN --mount=type=secret,id=GITHUB_TOKEN \
  GITHUB_TOKEN=$(cat /run/secrets/GITHUB_TOKEN) \
  pip install -r /tmp/requirements.txt

然后,如果您的本地环境中有 GITHUB_TOKEN 环境变量,您可以运行:

docker buildx build --secret id=GITHUB_TOKEN -t myimage .

或者,如果您在文件中有该值,则可以运行:

docker buildx build \
  --secret id=GITHUB_TOKEN,src=github_token.txt \
  -t myimage .

无论哪种情况,设置都不会烘焙到生成的图像中。有关详细信息,请参阅链接的文档。

关于python - 如何在pip的requirements.txt中使用GITHUB_TOKEN而不将其设置为Dockerfile中的环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73780369/

相关文章:

python - 'lessc' 不是内部或外部命令,也不是可运行的程序 或批处理文件

python - 使用pyserial读取多个串行设备时延迟较大

docker - 无法通过Macvlan网络从主机访问Docker容器

docker - 从 docker 容器访问主机数据库

Docker 构建步骤名称不能以数字开头

java - 如何执行: Upload Image > Recognize Text > Make Image Searchable > Store into DB?

python - 反转附加列表或前置列表是否更便宜? - Python

python - 如何强制signal.sawtooth从0开始?

linux - 无法在 docker Alpine 中添加具有高 UID 的用户

docker - 如何在支持 golang 的 gRPC 中减小 docker 镜像的大小?