通过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
相关产品推荐
相关产品推荐

