Bazel 将 Image Base 从 JDK 11 更改为 JDK 8

Bazel Change Image Base from JDK 11 to JDK 8

我正在尝试使用 bazel 为 buildfarm 构建自定义 docker 图像。我对 Bazel 还是很陌生,所以从 docker 到 bazel 的很多东西让我感到困惑。

由于我正在尝试修复的某些错误,我想要我的基本图像 运行 JDK 8,而不是 JDK 11。我假设

base = "@java_image_base//image"

有点类似于:

FROM openjdk:11

在 Dockerfile 中。但是,我想使用 JDK 8 的基本图像。我该怎么做呢?

我要构建的 BUILD 文件中的 bazel 目标是:

container_image(
    name = "server.container",
    base = "@java_image_base//image",
    cmd = [
        "buildfarm-server_deploy.jar",
        "/config/server.config",
        "--port",
        "8980",
    ],
    # leverage the implicit target of the buildfarm-server to get a fat jar.
    # this is simply a workaround for the fact that we have so many dependencies,
    # so we'd want some wrappy script. This seemed more straightforward.
    # https://docs.bazel.build/versions/master/be/java.html#java_binary_implicit_outputs
    files = [
        ":buildfarm-server_deploy.jar",
    ],
    tags = ["container"],
    visibility = ["//visibility:public"],
)

后续问题: 一般来说,我如何查找 bazel container_image 目标的其他基本图像?是否有类似于 Dockerhub 但用于 bazel 基础映像的东西?

container_image中的base必须是表示图像的Bazel目标,即:

  • 使用其他 Bazel 规则在本地构建的映像
  • 使用 container_import 从本地 tarball 导入的图像
  • 使用 container_pull
  • 从远程 Docker 存储库中提取的图像

如果您正在寻找 FROM 的简单替代品,那么您可能希望使用 container_pullWORKSPACE 中提取正确的图像并将其用作基础。