我正在为我的组织构建一个 GitLab CI/CD 管道,用于我们的一个项目。此管道中的一项作业将在我们自己的一台服务器上运行的 Docker 执行器 GitLab 运行器上执行。该作业涉及将 imagedocker:20.10.20
与 service 结合使用docker:20.10.20-dind
。目标是从我的项目构建一个 Docker 镜像,并将其上传到项目的容器注册表中托管在 gitlab.com 本身上(因此不在 Amazon ECR 上)。我已使用以下作业配置启动并运行它.gitlab-ci.yml
:
docker-image-build:
stage: Docker image build
image: docker:20.10.20
services:
- name: docker:20.10.20-dind
alias: docker
tags:
- docker-runner
script:
- echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER $CI_REGISTRY --password-stdin
- docker build --pull -m 3g --memory-swap -1 -t $CI_REGISTRY_IMAGE --build-arg FOO=$FOO --build-arg BAR=$BAR .
- docker push $CI_REGISTRY_IMAGE
然而,在docker login
命令中script
我收到了与网络安全相关的警告:
Login Succeeded
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
将未加密的凭证存储在可能残留的人工制品中对我们来说是一个大问题,因为我们非常关心网络安全。然而,我似乎找不到安装docker-credential-helpers在docker-in-docker容器中。 (我想或者认为我必须使用pass```` based credential helper.) It seems to be a very barebone Linux image without a package manager or compiler. It only has tools such as wget and tar, so I could be able to download binaries and I can in fact install the
docker-credential-pass binary itself. But I'm mostly stuck with no way to get
pass installed, let alone its dependency
gpg```以及足够的熵源。
我陷入困境,不知道该如何继续。任何建议都将不胜感激。在这种情况下我应该切换到 shell 执行器吗?
提前谢谢你!
Joshua