Jenkins构建的Docker镜像无名称和标签问题原因咨询
Jenkins构建Docker镜像无名称标签问题排查
基础信息
构建使用的Dockerfile内容
FROM golang:1.17.5 as builder WORKDIR /go/src/github.com/cnosdb/cnosdb COPY . /go/src/github.com/cnosdb/cnosdb RUN go env -w GOPROXY=https://goproxy.cn,direct RUN go env -w GO111MODULE=on RUN go install ./... FROM debian:stretch COPY --from=builder /go/bin/cnosdb /go/bin/cnosdb-cli /usr/bin/ COPY --from=builder /go/src/github.com/cnosdb/cnosdb/etc/cnosdb.sample.toml /etc/cnosdb/cnosdb.conf EXPOSE 8086 VOLUME /var/lib/cnosdb COPY docker/entrypoint.sh /entrypoint.sh COPY docker/init-cnosdb.sh /init-cnosdb.sh RUN chmod +x /entrypoint.sh /init-cnosdb.sh ENTRYPOINT ["/entrypoint.sh"] CMD ["cnosdb"]
相关截图
- Jenkins配置截图:

- 构建后镜像异常现象截图:

问题根本原因
该问题和Dockerfile写法无关,上述多阶段构建的Dockerfile语法完全正常,问题出在构建逻辑的配置上:
- Docker构建镜像时,必须通过
-t/--tag参数明确指定镜像名称和标签,才会给生成的镜像打标;如果构建时未指定该参数,最终只会生成一个仅带IMAGE ID的悬空镜像,展示为<none>:<none>,也就是观察到的无名称无标签现象。 - 结合Jenkins配置场景判断,要么是Shell构建步骤里写的
docker build命令没加-t参数,要么是使用Docker构建插件时,没有填写镜像仓库名称、镜像标签的配置项,导致插件执行构建时没有自动追加打标参数。
修复方法
- 若使用Shell命令执行构建:修改构建命令,明确指定名称和标签,可直接复用Jenkins内置环境变量做版本标识,示例:
# 用构建号作为标签,方便后续版本追溯 docker build -t cnosdb:${BUILD_NUMBER} . - 若使用Jenkins Docker插件构建:在对应构建步骤的配置页,填写镜像仓库/镜像名称,在标签栏填入自定义标签(支持使用Jenkins环境变量,比如
${BUILD_NUMBER}、latest等),保存后重新执行构建即可生成带正确名称标签的镜像。
内容的提问来源于stack exchange,提问作者xmh
相关产品推荐
相关产品推荐

