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

如何在自定义Nginx Docker镜像中安装AWS CLI并自动传递凭证

解决方案

分为两个核心部分:Dockerfile改造安装AWS CLI、运行时凭证注入(覆盖Jenkins+本地两种场景)

1. 改造Dockerfile安装AWS CLI

你使用的nginx:1.13.2基础镜像属于Debian系,直接在原有Dockerfile基础上增加AWS CLI v2的安装步骤即可,修改后的完整Dockerfile如下:

FROM library/nginx:1.13.2
LABEL maintainer="san@test.com"

# 安装AWS CLI依赖及AWS CLI v2
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    unzip \
    && rm -rf /var/lib/apt/lists/* \
    && curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
    && unzip awscliv2.zip \
    && ./aws/install \
    && rm -rf aws awscliv2.zip

# 原有逻辑保持不变
# Remove the default Nginx configuration file
RUN rm -v /etc/nginx/nginx.conf

# Copy a configuration file from the current directory
ADD nginx.conf /etc/nginx/

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log \
# Make PageSpeed cache writable
    && mkdir -p /var/cache/ngx_pagespeed && \
    chmod -R o+wr /var/cache/ngx_pagespeed
ADD server.crt /etc/nginx/ssl/
ADD server.key /etc/nginx/ssl/

ADD conf.d/ /etc/nginx/conf.d/
ADD proxy.d/ /etc/nginx/proxy.d/
CMD ["nginx", "-g", "daemon off;"]

注:不要在Dockerfile中硬编码任何AWS凭证,所有凭证均通过运行时注入的方式传入,避免凭证泄露风险

2. 运行时凭证注入方案

AWS CLI会自动读取环境变量、挂载的凭证文件、关联的IAM角色等来源的凭证,不需要额外配置,对应两种场景的处理方式如下:

2.1 Jenkins环境

你已经配置了aws-credentials类型的凭证,直接在Pipeline运行镜像的步骤中,把凭证的AK/SK作为环境变量注入即可,示例如下:

pipeline {
    agent any
    environment {
        AWS_CREDS = credentials('aws-credentials') // 填写你的凭证ID,和docker.withRegistry用的一致
    }
    stages {
        // 原有构建镜像阶段保持不变
        stage('Build Docker image') {
            steps {
                script {
                    docker.withRegistry("http://xyz-1.amazonaws.com", "ecr:eu-central-1:aws-credentials") {
                        def customImage = docker.build("web-proxy:${CY_RELEASE_VERSION}", ".")
                        customImage.push()
                    }
                }
            }
        }
        // 新增运行镜像执行操作的阶段示例
        stage('Run Nginx Config Sync') {
            steps {
                sh """
                docker run --rm \
                -e AWS_ACCESS_KEY_ID=${AWS_CREDS_USR} \
                -e AWS_SECRET_ACCESS_KEY=${AWS_CREDS_PSW} \
                -e AWS_DEFAULT_REGION=eu-central-1 \
                web-proxy:${CY_RELEASE_VERSION} \
                aws s3 cp s3://你的配置桶/nginx.conf /etc/nginx/nginx.conf
                """
            }
        }
    }
}

如果你的Jenkins运行在AWS EC2/EKS环境中,更安全的方案是直接给Jenkins节点绑定具有S3访问权限的IAM角色,不需要注入AK/SK,AWS CLI会自动读取角色凭证。

2.2 本地运行场景

本地已经配置过AWS凭证的情况下,有两种方式传入凭证:

  • 方式1:挂载本地~/.aws目录到容器中
docker run --rm -v ~/.aws:/root/.aws web-proxy-dev_san_1:1.11 aws s3 ls
  • 方式2:临时传入环境变量
docker run --rm \
-e AWS_ACCESS_KEY_ID=你的AK \
-e AWS_SECRET_ACCESS_KEY=你的SK \
-e AWS_DEFAULT_REGION=eu-central-1 \
web-proxy-dev_san_1:1.11 aws s3 ls

3. 自定义启动逻辑

你要动态修改Nginx配置的需求,可以写一个启动脚本作为入口,示例脚本start.sh如下:

#!/bin/bash
# 从S3同步最新配置
aws s3 cp s3://你的配置桶/conf.d/ /etc/nginx/conf.d/ --recursive
# 校验Nginx配置合法性
nginx -t
# 启动Nginx
exec nginx -g "daemon off;"

然后在Dockerfile中增加脚本拷贝和执行权限配置:

ADD start.sh /start.sh
RUN chmod +x /start.sh
CMD ["/start.sh"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 15:36:03