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

在AWS CodeBuild配置pnpm环境并解决Docker连接失败问题

问题解决:AWS CodeBuild中Docker守护进程未启动错误

错误原因

CodeBuild运行环境默认未启动Docker守护进程,且需要开启**特权模式(privileged mode)**才能执行Docker命令;另外你的docker login命令中用户名使用了自定义变量${AWS_USER_NAME},ECR登录的固定用户名是AWS,这也可能导致后续登录异常。

解决方案

方案1:修改buildspec.yml,启用Docker支持并修复登录命令

直接调整现有buildspec,无需自定义CodeBuild镜像:

version: 0.2

# 开启特权模式,允许运行Docker守护进程
privileged: true

phases:
  install:
    runtime-versions:
      nodejs: 18
    commands:
      # 启动Docker守护进程
      - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2 &
      # 等待Docker服务启动完成
      - timeout 15 sh -c "until docker info; do echo .; sleep 1; done"
      # 安装指定版本的pnpm
      - npm install -g pnpm@8.9.0
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      # ECR登录用户名固定为AWS,替换错误的自定义变量
      - aws ecr get-login-password --region ${AWS_DEFAULT_REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com.cn
      - REPOSITORY_URI=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com.cn/${IMAGE_REPO_NAME}
      - COMMIT_HASH=$(echo ${CODEBUILD_RESOLVED_SOURCE_VERSION} | cut -c 1-7)
      - IMAGE_TAG=${ENV_LATEST}-${COMMIT_HASH:=latest}
  build:
    commands:
      - echo 切换腾讯npm源(按需保留)
      - echo Install started
      - pnpm install
      - echo Build started
      - pnpm run build:${PROJECT_ENV}
      - echo Copy dist resource
      - cp -r dist docker/
      - echo Building the docker image...
      - docker build -t ${REPOSITORY_URI}:${ENV_LATEST} ./docker/
      - docker tag ${REPOSITORY_URI}:${ENV_LATEST} ${REPOSITORY_URI}:${IMAGE_TAG}
  post_build:
    commands:
      - echo Pushing the Docker image...
      - docker push ${REPOSITORY_URI}:${ENV_LATEST}
      - docker push ${REPOSITORY_URI}:${IMAGE_TAG}
cache:
  paths:
    - '/root/.npm/**/*'
    - '/root/.pnpm-store/**/*' # 添加pnpm缓存路径,加速后续构建

方案2:使用自定义CodeBuild镜像(保留你的Dockerfile)

如果坚持使用自定义镜像,需完成以下步骤:

  1. 将自定义镜像推送到你的ECR仓库
  2. 在CodeBuild项目配置中,选择自定义镜像并指定该ECR镜像地址
  3. 在buildspec.yml中添加privileged: true,并保留方案1中等待Docker启动的命令
  4. 移除自定义Dockerfile中的ENTRYPOINT配置,避免与CodeBuild启动流程冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:30:04