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

通过Bitbucket部署至Elastic Beanstalk时遇Docker证书缺失错误求助

问题描述

我通过Bitbucket Pipelines部署应用到AWS Elastic Beanstalk时,部署阶段出现Docker相关错误:unable to resolve docker endpoint: open /root/.docker/ca.pem: no such file or directory。

我的bitbucket-pipelines.yml配置如下:

image: atlassian/default-image:2

pipelines:
  branches:
    development:
      - step:
          name: "Install Server"
          image: node:10.19.0
          caches:
            - node
          script:
            - npm install
      - step:
          name: "Install and Build Client"
          image: node:14.17.3
          caches:
            - node
          script:
            - cd ./client && npm install
            - npm run build
      - step:
          name: "Build zip"
          script:
            - cd ./client
            - shopt -s extglob
            - rm -rf !(build)
            - ls
            - cd ..
            - apt-get update && apt-get install -y zip
            - zip -r application.zip . -x "node_modules/**"
      - step:
          name: "Deployment to Development"
          deployment: staging
          script:
            - ls
            - pipe: atlassian/aws-elasticbeanstalk-deploy:1.0.2
              variables:
                AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
                AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
                AWS_DEFAULT_REGION: $AWS_REGION
                APPLICATION_NAME: $APPLICATION_NAME
                ENVIRONMENT_NAME: $ENVIRONMENT_NAME
                ZIP_FILE: "application.zip"

部署阶段的错误日志:

+ docker container run \
   --volume=/opt/atlassian/pipelines/agent/build:/opt/atlassian/pipelines/agent/build \
   --volume=/opt/atlassian/pipelines/agent/ssh:/opt/atlassian/pipelines/agent/ssh:ro \
   --volume=/usr/local/bin/docker:/usr/local/bin/docker:ro \
   --volume=/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes:/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes \
   --volume=/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes/atlassian/aws-elasticbeanstalk-deploy:/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes/atlassian/aws-elasticbeanstalk-deploy \
   --workdir=$(pwd) \
   --label=org.bitbucket.pipelines.system=true \
   --env=BITBUCKET_STEP_TRIGGERER_UUID="$BITBUCKET_STEP_TRIGGERER_UUID" \
   --env=BITBUCKET_REPO_FULL_NAME="$BITBUCKET_REPO_FULL_NAME" \
   --env=BITBUCKET_GIT_HTTP_ORIGIN="$BITBUCKET_GIT_HTTP_ORIGIN" \
   --env=BITBUCKET_PROJECT_UUID="$BITBUCKET_PROJECT_UUID" \
   --env=BITBUCKET_REPO_IS_PRIVATE="$BITBUCKET_REPO_IS_PRIVATE" \
   --env=BITBUCKET_WORKSPACE="$BITBUCKET_WORKSPACE" \
   --env=BITBUCKET_DEPLOYMENT_ENVIRONMENT_UUID="$BITBUCKET_DEPLOYMENT_ENVIRONMENT_UUID" \
   --env=BITBUCKET_SSH_KEY_FILE="$BITBUCKET_SSH_KEY_FILE" \
   --env=BITBUCKET_REPO_OWNER_UUID="$BITBUCKET_REPO_OWNER_UUID" \
   --env=BITBUCKET_BRANCH="$BITBUCKET_BRANCH" \
   --env=BITBUCKET_REPO_UUID="$BITBUCKET_REPO_UUID" \
   --env=BITBUCKET_PROJECT_KEY="$BITBUCKET_PROJECT_KEY" \
   --env=BITBUCKET_DEPLOYMENT_ENVIRONMENT="$BITBUCKET_DEPLOYMENT_ENVIRONMENT" \
   --env=BITBUCKET_REPO_SLUG="$BITBUCKET_REPO_SLUG" \
   --env=CI="$CI" \
   --env=BITBUCKET_REPO_OWNER="$BITBUCKET_REPO_OWNER" \
   --env=BITBUCKET_STEP_RUN_NUMBER="$BITBUCKET_STEP_RUN_NUMBER" \
   --env=BITBUCKET_BUILD_NUMBER="$BITBUCKET_BUILD_NUMBER" \
   --env=BITBUCKET_GIT_SSH_ORIGIN="$BITBUCKET_GIT_SSH_ORIGIN" \
   --env=BITBUCKET_PIPELINE_UUID="$BITBUCKET_PIPELINE_UUID" \
   --env=BITBUCKET_COMMIT="$BITBUCKET_COMMIT" \
   --env=BITBUCKET_CLONE_DIR="$BITBUCKET_CLONE_DIR" \
   --env=PIPELINES_JWT_TOKEN="$PIPELINES_JWT_TOKEN" \
   --env=BITBUCKET_STEP_UUID="$BITBUCKET_STEP_UUID" \
   --env=BITBUCKET_DOCKER_HOST_INTERNAL="$BITBUCKET_DOCKER_HOST_INTERNAL" \
   --env=DOCKER_HOST="tcp://host.docker.internal:2375" \
   --env=BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes" \
   --env=BITBUCKET_PIPE_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes/atlassian/aws-elasticbeanstalk-deploy" \
   --env=APPLICATION_NAME="$APPLICATION_NAME" \
   --env=AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID" \
   --env=AWS_DEFAULT_REGION="$AWS_REGION" \
   --env=AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY" \
   --env=ENVIRONMENT_NAME="$ENVIRONMENT_NAME" \
   --env=ZIP_FILE="application.zip" \
   --add-host="host.docker.internal:$BITBUCKET_DOCKER_HOST_INTERNAL" \
   bitbucketpipelines/aws-elasticbeanstalk-deploy:1.0.2
unable to resolve docker endpoint: open /root/.docker/ca.pem: no such file or directory

我严格按照Bitbucket文档操作,但不知道如何添加.pem文件解决这个问题。


解决方案

这个错误并非需要手动添加Docker CA证书文件,而是因为Bitbucket Pipelines的Docker-in-Docker环境配置问题,或是旧版本部署管道的兼容性问题。可通过以下方式解决:

1. 更新部署管道版本

你当前使用的atlassian/aws-elasticbeanstalk-deploy:1.0.2版本较旧,存在Docker环境兼容性问题。将管道版本更新到最新稳定版,比如2.0.1:

pipe: atlassian/aws-elasticbeanstalk-deploy:2.0.1

2. 禁用Docker环境变量

部署Elastic Beanstalk无需连接Docker Daemon,可在部署步骤中添加DOCKER_HOST=""来禁用无效的Docker连接尝试:

- step:
    name: "Deployment to Development"
    deployment: staging
    script:
      - ls
      - pipe: atlassian/aws-elasticbeanstalk-deploy:1.0.2
        variables:
          AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
          AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
          AWS_DEFAULT_REGION: $AWS_REGION
          APPLICATION_NAME: $APPLICATION_NAME
          ENVIRONMENT_NAME: $ENVIRONMENT_NAME
          ZIP_FILE: "application.zip"
          DOCKER_HOST: ""

3. 直接使用AWS CLI部署

如果上述方法无效,可切换部署步骤的基础镜像为官方AWS CLI镜像,绕过Bitbucket管道的Docker问题:

- step:
    name: "Deployment to Development"
    deployment: staging
    image: amazon/aws-cli:latest
    script:
      - aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
      - aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
      - aws configure set region $AWS_REGION
      # 上传应用包到S3存储桶(需提前创建对应桶)
      - aws s3 cp application.zip s3://your-bucket-name/application-dev.zip
      # 创建Elastic Beanstalk应用版本
      - aws elasticbeanstalk create-application-version --application-name $APPLICATION_NAME --version-label "dev-$(date +%Y%m%d%H%M%S)" --source-bundle S3Bucket=your-bucket-name,S3Key=application-dev.zip
      # 更新环境至新版本
      - aws elasticbeanstalk update-environment --environment-name $ENVIRONMENT_NAME --version-label "dev-$(date +%Y%m%d%H%M%S)"

注意:需确保AWS IAM用户拥有elasticbeanstalk:*和s3:*的相关权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:35:52