如何在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
相关产品推荐
相关产品推荐

