我在让gitlab-runner执行docker buildx命令时遇到了一些麻烦。我有一个gitlab-runner,它是这样配置的:
[[runners]]
name = "Name"
url = "https://gitlab.mypage.com/"
token = "token"
executor = "shell"
shell = "powershell"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]以及触发的流水线:
stages:
- test
- build
test_backend:
stage: test
script:
- exit 0
only:
- merge_request
- master
build:
stage: build
script:
- docker login someregistry -u xxxx -p yyyy
- docker buildx ls
only:
- merge_request
- master
- dev我把代码弄乱了一点。
我遇到的问题是,docker login命令执行正确,而docker buildx命令执行不正确。我已经在机器上手动测试了这个命令,它是成功的。
有人能帮帮我吗?



发布于 2020-08-06 15:44:59
我找到了解决我的问题的办法。要使用实验功能,您可以设置环境变量。
$env:DOCKER_CLI_EXPERIMENTAL=enabled
此命令可在ci管道中使用。
shell executor中的docker cli看起来与您可以在系统上使用的docker cli不同。非常令人困惑。
发布于 2020-08-06 01:32:18
在我使用docker runner的经验中,最有可能的情况是,docker runner没有启用实验功能,只是因为docker base有它……我在过去经历过这样的事情:跑步者中的码头并不是你接待跑步者的码头!
你必须为此添加DIND (Docker in Docker)服务,因为据我所知,只有这样,来自你主机的docker才能连接到runner中的docker。
我们是这样做的:
# gitlab-runner
gitlab-runner:
container_name: vivavis.gitlab-runner
image: gitlab/gitlab-runner:latest
restart: always
volumes:
- gitlab-runner:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock // <<<<<< THIS IS THE IMPORTANT LINE
networks:
- swp-infra-code这里有一点警告:
当激活它时,我们遇到了一个错误/没有很好地清理:因为GitLab运行器现在与基础docker连接,在运行CI / CD时创建的映像没有正确删除: GitLab没有实现该功能,它只是假设,当gitlab- Runner -container死时,里面的所有数据都会死掉。但是有了这个连接,这里的数据不会消亡,因为它不是在容器中创建的-它是在基础docker中创建的。
https://stackoverflow.com/questions/63265110
复制相似问题