如何将具有多个标签的单个映像推送到容器注册表?

gia*_*200 2 container-registry ibm-cloud docker-buildkit

我目前正在使用以下命令来构建带有标签的图像:

buildctl build \
    --frontend dockerfile.v0 --opt filename=${DOCKER_FILE} --local dockerfile=${DOCKER_ROOT} \
    ${BUILD_ARGS} --local context=${DOCKER_ROOT} \
    --import-cache type=registry,ref=${REGISTRY_URL}/${REGISTRY_NAMESPACE}/${IMAGE_NAME} \
    --output type=image,name="${REGISTRY_URL}/${REGISTRY_NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG}",push=true
Run Code Online (Sandbox Code Playgroud)

我想向同一张图像添加新标签。我已经尝试过 Buildctl 命令中建议的方法来标记多个图像,但失败了。

buildctl build \
    --frontend dockerfile.v0 --opt filename=${DOCKER_FILE} --local dockerfile=${DOCKER_ROOT} \
    ${BUILD_ARGS} --local context=${DOCKER_ROOT} \
    --import-cache type=registry,ref=${REGISTRY_URL}/${REGISTRY_NAMESPACE}/${IMAGE_NAME} \
    --output type=image,name="${REGISTRY_URL}/${REGISTRY_NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG},${REGISTRY_URL}/${REGISTRY_NAMESPACE}/${IMAGE_NAME}:latest",push=true
Run Code Online (Sandbox Code Playgroud)
error: invalid value acme.com/namespace/image-name:latest
Run Code Online (Sandbox Code Playgroud)

我也尝试了以下方法,但它只创建带有latest标签的图像,而不是两者

error: invalid value acme.com/namespace/image-name:latest
Run Code Online (Sandbox Code Playgroud)

我想要的是:

  • 1 张图像有 2 个标签:IMAGE_TAG和的值latest

有谁知道该怎么做?

gia*_*200 5

name="foo"和之间似乎有区别"name=foo"。在这种情况下,正确的是后者。

我跟踪了启用此功能的问题https://github.com/moby/buildkit/issues/797。注释显示了如何执行此操作(根据您的环境,可能需要转义;尽管并非总是如此)。

根据问题中的场景,构建和推送具有多个标签的单个图像的正确方法如下(注意它是如何的"name=

buildctl build \
    --frontend dockerfile.v0 --opt filename=${DOCKER_FILE} --local dockerfile=${DOCKER_ROOT} \
    ${BUILD_ARGS} --local context=${DOCKER_ROOT} \
    --import-cache type=registry,ref=${REGISTRY_URL}/${REGISTRY_NAMESPACE}/${IMAGE_NAME} \
    --output type=image,\"name=${REGISTRY_URL}/${REGISTRY_NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG},${REGISTRY_URL}/${REGISTRY_NAMESPACE}/${IMAGE_NAME}:latest\",push=true
Run Code Online (Sandbox Code Playgroud)