创建 Dockerfile, 因为需要 aws 命令,就不特别去安装了,直接使用 awslinux 的镜像 docker 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 FROM amazonlinux:2 RUN yum update -y && \ yum install -y awscli jq && \ yum clean all WORKDIR /app COPY refresh-ecr-credentials.sh ENV AWS_REGION=${AWS_REGION:-us-east-1} ENV REFRESH_INTERVAL=${REFRESH_INTERVAL:-3600} ENV CREDENTIALS_DIR=${CREDENTIALS_DIR:-/shared_credentials} ENV AWS_CREDENTIALS_FILE=${AWS_CREDENTIALS_FILE:-/opt/password} RUN mkdir -p ${CREDENTIALS_DIR} ~/.aws /opt && \ chmod 700 ${CREDENTIALS_DIR} ~/.aws /opt && \ chmod +x /app/refresh-ecr-credentials.sh CMD ["/app/refresh-ecr-credentials.sh"] VOLUME ["${CREDENTIALS_DIR}"] 准备 refresh-ecr-credentials.sh bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/bin/bash log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >&2 } # 循环刷新 ECR 凭证并输出到 AWS_CREDENTIALS_FILE while true; do log "刷新ECR凭证..." if aws ecr get-login-password --region ${AWS_REGION} > ${AWS_CREDENTIALS_FILE} 2>/dev/null; then chmod 600 "${AWS_CREDENTIALS_FILE}" log "ECR密钥已生工刷新" else log "刷新ECR密钥失败" fi done