GitLab CI流水线执行后Docker容器消失问题求助
问题原因与解决方案
核心原因
你遇到的问题根源是GitLab Runner Docker执行器的隔离机制:
- Docker执行器会为每个流水线job创建一个独立的Docker容器作为运行环境
- 你配置的
docker:dind服务是在这个job容器内部启动的独立Docker守护进程,所有docker compose命令都在这个内部守护进程中执行 - 这些容器属于dind内部的Docker环境,和树莓派主机的Docker守护进程完全隔离,因此主机上执行
docker ps -a无法看到它们
解决方案
方案1:切换为Shell执行器(与教程一致)
直接让job在树莓派主机环境中执行命令,无需隔离:
- 停止GitLab Runner服务:
sudo gitlab-runner stop - 修改Runner配置文件(默认路径
/etc/gitlab-runner/config.toml),将executor = "docker"改为executor = "shell" - 重启Runner服务:
sudo gitlab-runner restart - 简化CI部署job配置,移除Docker相关镜像、服务和变量:
deploy-job: stage: deploy script: - docker info - docker compose down - docker compose build - docker compose up -d rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
方案2:让Docker执行器连接主机Docker守护进程
如果保留Docker执行器,可通过挂载主机Docker Socket实现job直接操作主机容器:
- 修改CI部署job配置,移除
docker:dind服务,添加Socket挂载:deploy-job: stage: deploy image: docker:latest variables: DOCKER_HOST: unix:///var/run/docker.sock script: - docker info - docker compose down - docker compose build - docker compose up -d rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH volumes: - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker-compose:/usr/bin/docker-compose # 若主机已安装docker-compose,挂载到容器内(可选) - 赋予GitLab Runner用户访问主机Docker的权限:
sudo usermod -aG docker gitlab-runner - 重启Runner服务:
sudo gitlab-runner restart
内容的提问来源于stack exchange,提问作者Ole
相关产品推荐
相关产品推荐

