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

如何在远程机器运行Docker容器?Jenkins Pipeline部署疑问

在AWS EC2远程机器上无需复杂设置运行Jenkins Pipeline中的Docker容器

Hey Rajesh, 我仔细看了你的Jenkins Pipeline代码和当前的运行场景——用AWS EC2的ec2-user账号操作,代码能跑但你纠结“不做特定额外设置的话,怎么在远程机器上运行Docker容器”。我分两种常见场景给你捋清楚:

场景1:Jenkins Agent就是当前这台EC2实例(远程机器即本机)

这种情况其实不需要额外配置远程节点,只要解决基础权限和依赖问题就行:

  • 第一步:给ec2-user开放Docker操作权限
    默认Docker只允许root用户操作,所以先把ec2-user加入docker用户组,避免每次用sudo:
    sudo usermod -aG docker ec2-user
    
    退出当前SSH会话再重新登录,让权限生效。
  • 第二步:确保EC2上装了Docker,Jenkins装了对应插件
    在EC2上执行安装命令:
    sudo yum update -y
    sudo amazon-linux-extras install docker -y
    sudo service docker start
    sudo systemctl enable docker
    
    然后在Jenkins后台的「插件管理」里安装Docker Pipeline插件,这样你的Pipeline里的docker.build这类语法才能正常识别。
  • 调整你的Pipeline(可选优化)
    你的代码本身没问题,但可以把sleep换成健康检查,避免无意义等待:
    node{
     stage('SCM CHECKOUT'){
      git 'https://bitbucket.org/rajesh212/myapp.git'
     }
     stage('MVN BUILD'){
      def mvnHome = tool name: 'maven', type: 'maven'
      sh "${mvnHome}/bin/mvn clean package"
     }
     stage('DEPLOYMENT VIA DOCKER'){
      def customImage = docker.build("image:${env.BUILD_ID}")
      customImage.withRun('-p 9090:8080 --health-cmd="curl -f http://localhost:8080/health || exit 1" --health-interval=5s --health-timeout=3s'){ container ->
       sh "docker wait ${container.id}"
      }
     }
    }
    

场景2:远程机器是另一台独立的AWS EC2实例

如果要把容器部署到别的EC2上,不用配置复杂的Jenkins远程节点,用SSH直接操作就行:

  • 前提准备
    确保Jenkins所在的机器能通过SSH密钥登录目标EC2,同时目标EC2的ec2-user已经加入docker组(同场景1的第一步),并且装了Docker。
  • 修改Pipeline的部署阶段
    把构建产物和Dockerfile传到目标机器,再远程执行Docker命令:
    node{
     stage('SCM CHECKOUT'){
      git 'https://bitbucket.org/rajesh212/myapp.git'
     }
     stage('MVN BUILD'){
      def mvnHome = tool name: 'maven', type: 'maven'
      sh "${mvnHome}/bin/mvn clean package"
     }
     stage('DEPLOY TO REMOTE EC2'){
      // 替换成你的SSH密钥路径和目标EC2的IP/域名
      def sshKey = '/var/lib/jenkins/.ssh/your-ec2-key.pem'
      def remoteHost = 'ec2-user@xxx.xxx.xxx.xxx'
      
      // 传构建好的jar和Dockerfile到远程机器
      sh "scp -i ${sshKey} target/your-app.jar ${remoteHost}:/tmp/"
      sh "scp -i ${sshKey} Dockerfile ${remoteHost}:/tmp/"
      
      // 远程执行Docker构建和启动命令
      sh """
      ssh -i ${sshKey} ${remoteHost} << EOF
        cd /tmp
        # 先清理旧容器(可选)
        docker stop \$(docker ps -q --filter ancestor=image:${env.BUILD_ID}) 2>/dev/null || true
        docker rm \$(docker ps -aq --filter ancestor=image:${env.BUILD_ID}) 2>/dev/null || true
        # 构建镜像并启动容器
        docker build -t image:${env.BUILD_ID} .
        docker run -d -p 9090:8080 image:${env.BUILD_ID}
      EOF
      """
     }
    }
    

这样不管是本机还是远程EC2,都不用做太复杂的特定设置,就能顺利运行Docker容器啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:53:15