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

如何在GitHub Actions的Docker构建步骤中导出Nginx版本用于镜像打标?

获取Docker镜像中Nginx版本并打标签的方法

这里有两种可行的方案实现需求:

方案1:通过临时容器提取版本

无需修改Dockerfile,先构建临时镜像,再启动临时容器执行命令捕获Nginx版本,最后用版本打标推送。修改GitHub Actions作业步骤如下:

- name: Build image and retrieve Nginx version
  id: build-image
  run: |
    # 构建临时镜像
    docker build -t temp-nginx -f ./nginx/Dockerfile .
    # 捕获Nginx版本(注意nginx -v输出到stderr,需重定向到stdout)
    NGINX_VERSION=$(docker run --rm temp-nginx nginx -v 2>&1 | grep -oP 'nginx/\K\d+\.\d+\.\d+')
    # 定义最终镜像标签
    FINAL_TAG="nginx.v${NGINX_VERSION}"
    # 为镜像打最终标签并推送
    docker tag temp-nginx $FINAL_TAG
    docker push $FINAL_TAG
    # 可选:将版本输出到GitHub Actions变量,供后续步骤使用
    echo "nginx_version=${NGINX_VERSION}" >> $GITHUB_OUTPUT

方案2:在Dockerfile中预存版本信息

修改Dockerfile,将Nginx版本写入文件,构建后从镜像中读取该文件内容获取版本:

修改后的Dockerfile片段:

RUN apt -y install nginx
# 将Nginx版本写入镜像内的文件
RUN nginx -v 2>&1 | grep -oP 'nginx/\K\d+\.\d+\.\d+' > /nginx-version.txt
RUN nginx -v

对应的GitHub Actions步骤:

- name: Build image and extract Nginx version
  id: build-image
  run: |
    # 构建镜像
    docker build -t temp-nginx -f ./nginx/Dockerfile .
    # 从镜像中拷贝版本文件到本地
    docker run --rm temp-nginx cat /nginx-version.txt > ./local-nginx-version.txt
    # 读取版本号
    NGINX_VERSION=$(cat ./local-nginx-version.txt)
    # 打标并推送
    FINAL_TAG="nginx.v${NGINX_VERSION}"
    docker tag temp-nginx $FINAL_TAG
    docker push $FINAL_TAG
    echo "nginx_version=${NGINX_VERSION}" >> $GITHUB_OUTPUT

补充说明

  • nginx -v的输出默认发送到标准错误流,因此需要用2>&1重定向到标准输出才能被捕获。
  • 正则表达式grep -oP 'nginx/\K\d+\.\d+\.\d+'用于提取版本号核心部分,适配nginx/1.24.0这类格式的输出。
  • 方案1无需改动Dockerfile,适合快速调整;方案2通过文件存储版本,逻辑更清晰,便于后续排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:42:54