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

如何让容器化Jenkins构建的Docker应用容器运行在Ubuntu 20.04宿主机而非Jenkins容器内部

解决Jenkins容器内构建的应用跑在宿主机的方法

其实你遇到的问题本质是:Jenkins容器里的Docker命令默认调用的是容器内部的Docker daemon,所以应用容器会被限制在Jenkins容器里运行。要让它直接用宿主机的Docker环境,只需要按下面几步操作就行:

1. 修改Jenkins的docker-compose配置,挂载宿主机Docker资源

编辑你部署Jenkins的docker-compose.yml,给Jenkins服务添加两个关键挂载项:

  • 挂载宿主机的Docker socket:/var/run/docker.sock:/var/run/docker.sock,这会让Jenkins容器里的docker命令直接和宿主机的Docker daemon通信
  • 挂载宿主机的Docker客户端(可选但推荐):/usr/bin/docker:/usr/bin/docker,确保Jenkins容器里的docker版本和宿主机一致,避免兼容性问题

修改后的Jenkins服务配置示例:

services:
  jenkins:
    image: jenkins/jenkins:lts
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - jenkins_home:/var/jenkins_home
      # 新增以下两行挂载
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
    user: root # 先临时用root权限,后续再调整更安全的权限配置

修改完成后重启Jenkins容器:

docker-compose down && docker-compose up -d

2. 处理Docker socket的权限问题(关键)

默认情况下,宿主机的/var/run/docker.sock属于docker用户组,而Jenkins容器里的jenkins用户不在这个组里,会导致执行docker命令时提示权限不足。

你可以选两种方式解决:

  • 方式一(推荐):在Jenkins容器内把jenkins用户加入docker组
    先进入Jenkins容器:

    docker exec -it <你的Jenkins容器名称> bash
    

    然后执行添加组命令:

    usermod -aG docker jenkins
    

    最后重启Jenkins容器让权限生效。

  • 方式二(临时测试用,不推荐生产环境):直接放宽宿主机Docker socket的权限

    chmod 666 /var/run/docker.sock
    

    这种方式虽然简单,但存在安全风险,生产环境尽量不用。

3. 处理docker-compose的文件路径同步问题

Jenkins执行docker-compose up时用的是容器内的路径,所以你需要把应用代码所在的目录挂载到Jenkins容器里,确保Jenkins工作区的代码路径和宿主机路径同步。

比如在Jenkins的docker-compose配置里再加一个挂载项:

volumes:
  # 其他挂载项...
  - /opt/your-app-code:/var/jenkins_home/workspace/your-app-workspace

这样Jenkins工作区里的代码就和宿主机的/opt/your-app-code目录同步了,执行docker-compose up时,宿主机的Docker daemon会直接用本地路径启动应用容器。

4. 验证效果

重新触发Jenkins任务,等构建和启动命令执行完成后,在宿主机上执行docker ps,就能看到应用容器已经跑在宿主机上了,外部也能正常访问(记得确认应用容器的端口映射配置是否正确)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:22:38