如何为 bazel container_image 规则指定等效的 Dockerfile 运行?

How to specify equivalent of Dockerfile RUN for bazel container_image rule?

我正在将 Dockerfile 转换为 bazel container_image 规则。我如何为 container_image 指定 RUN 规范?

container_run_and_commit 将 运行 命令并用结果创建一个新图层,这类似于 RUN。像这样:

load("@io_bazel_rules_docker//docker/util:run.bzl", "container_run_and_commit")

container_run_and_commit(
  name = "x",
  commands = ["touch /xyz"],
  image = ":my_base.tar",
)

image 参数是一个 docker save 风格的 tarball。您可以通过外部存储库引入它,或使用 container_image 规则的隐式 .tar 输出。如果您在同一个包中有 container_image(name = "my_base"),我上面的示例将起作用。

我不知道这是否是您的用例,但如果它适用于其他人,

如果您只是想使用 bazel run :my_container 在容器映像上执行 docker run 类型的执行。

您可以通过将 legacy_run_behavior 设置为 false 来实现。此属性没有明确记录,因为我认为它是单独的包管理器规则的一部分。

container_image(
    name = "image",
    base = "my_base_image",
    legacy_run_behavior = False,
    tars = [
        "my_files",
    ],
)