You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI流水线执行后Docker容器消失问题求助

问题原因与解决方案

核心原因

你遇到的问题根源是GitLab Runner Docker执行器的隔离机制:

  • Docker执行器会为每个流水线job创建一个独立的Docker容器作为运行环境
  • 你配置的docker:dind服务是在这个job容器内部启动的独立Docker守护进程,所有docker compose命令都在这个内部守护进程中执行
  • 这些容器属于dind内部的Docker环境,和树莓派主机的Docker守护进程完全隔离,因此主机上执行docker ps -a无法看到它们

解决方案

方案1:切换为Shell执行器(与教程一致)

直接让job在树莓派主机环境中执行命令,无需隔离:

  1. 停止GitLab Runner服务:
    sudo gitlab-runner stop
    
  2. 修改Runner配置文件(默认路径/etc/gitlab-runner/config.toml),将executor = "docker"改为executor = "shell"
  3. 重启Runner服务:
    sudo gitlab-runner restart
    
  4. 简化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直接操作主机容器:

  1. 修改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,挂载到容器内(可选)
    
  2. 赋予GitLab Runner用户访问主机Docker的权限:
    sudo usermod -aG docker gitlab-runner
    
  3. 重启Runner服务:
    sudo gitlab-runner restart
    

内容的提问来源于stack exchange,提问作者Ole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:15:29