我有一个可以通过 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/