在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)
如果坚持使用自定义镜像,需完成以下步骤:
- 将自定义镜像推送到你的ECR仓库
- 在CodeBuild项目配置中,选择自定义镜像并指定该ECR镜像地址
- 在buildspec.yml中添加
privileged: true,并保留方案1中等待Docker启动的命令 - 移除自定义Dockerfile中的
ENTRYPOINT配置,避免与CodeBuild启动流程冲突
内容的提问来源于stack exchange,提问作者Manster
相关产品推荐
相关产品推荐

