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

GitLab Runner远程Docker配置疑问:是否需本地Docker及多环境部署

问题解答

1. Server2是否需要安装Docker Engine?

不需要强制安装,取决于你选择的Runner执行器类型:

  • 如果用shell执行器,仅通过SSH或远程Docker客户端调用Server3/Server4的Docker服务,Server2本地无需安装Docker;
  • 如果需要用docker执行器来构建镜像、运行临时作业容器(比如编译代码的环境),才需要在Server2安装Docker Engine,但这和部署到远程测试/生产环境的需求是分离的。

2. 配置Runner分别部署到测试和生产环境的步骤

第一步:让Server2能访问远程Docker节点

在Server3(测试)和Server4(生产)上配置Docker允许远程访问:

  • 编辑/etc/docker/daemon.json,添加远程监听地址:
    {
      "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"]
    }
    

    生产环境建议启用TLS加密连接,避免明文传输;测试环境可临时用2375非加密端口(不推荐生产用)

  • 重启Docker服务:
    systemctl restart docker
    
  • 开放防火墙对应端口(比如2376),确保Server2能连通Server3/Server4的该端口。

第二步:配置Runner的两种方案

方案一:单Runner通过环境变量切换目标环境

在Server2上配置Docker客户端多上下文:

# 创建测试环境上下文
docker context create test-env --docker "host=tcp://[Server3-IP]:2376"
# 创建生产环境上下文
docker context create prod-env --docker "host=tcp://[Server4-IP]:2376"

然后在项目的.gitlab-ci.yml中通过规则切换上下文:

stages:
  - deploy-test
  - deploy-prod

deploy-test:
  stage: deploy-test
  script:
    - docker context use test-env
    - docker run -d --name test-app your-test-image:${CI_COMMIT_SHORT_SHA}
  only:
    - branches
    - tags: /^test-.*/

deploy-prod:
  stage: deploy-prod
  script:
    - docker context use prod-env
    - docker run -d --name prod-app your-prod-image:${CI_COMMIT_TAG}
  only:
    - tags: /^prod-.*/
  when: manual # 生产部署建议手动触发,防止误操作

方案二:注册两个独立Runner分别对应测试/生产

在Server2上注册测试环境Runner:

gitlab-runner register \
  --url "http://[Server1-GitLab-IP]/" \
  --registration-token "你的GitLab项目注册令牌" \
  --description "Test Env Runner" \
  --tag-list "test,deploy" \
  --executor "shell" \
  --env "DOCKER_HOST=tcp://[Server3-IP]:2376"

注册生产环境Runner:

gitlab-runner register \
  --url "http://[Server1-GitLab-IP]/" \
  --registration-token "你的GitLab项目注册令牌" \
  --description "Prod Env Runner" \
  --tag-list "prod,deploy" \
  --executor "shell" \
  --env "DOCKER_HOST=tcp://[Server4-IP]:2376"

然后在.gitlab-ci.yml中通过tags指定对应Runner:

deploy-test:
  stage: deploy-test
  tags:
    - test
  script:
    - docker run -d --name test-app your-test-image:${CI_COMMIT_SHORT_SHA}
  only:
    - test/*

deploy-prod:
  stage: deploy-prod
  tags:
    - prod
  script:
    - docker run -d --name prod-app your-prod-image:${CI_COMMIT_TAG}
  only:
    - main
  when: manual

权限注意事项

  • Server2上运行GitLab Runner的用户,需要具备执行Docker客户端命令的权限,或者配置SSH免密登录到Server3/Server4,直接通过SSH执行远程Docker命令(比如ssh user@server3 'docker run ...');
  • 生产环境务必给Docker远程连接配置TLS证书,禁止裸奔传输。

内容的提问来源于stack exchange,提问作者Temp Worker Here

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:27:23