1

从实现 empty_dirs 的PR来看,似乎支持在 TarFile 类的 add_empty_dir 方法中定义 dir 所有者(使用 names 参数)和模式。

但是 container_image 规则(和 container_layer)只支持模式。

这有效:

container_image(
    name = "with_empty_dirs",
    empty_dirs = [
        "etc",
        "foo",
        "bar",
    ],
    mode = "0o777",
)

但这会返回一个错误:“错误:(...)在 'container_image_' 规则中没有这样的属性 'names'”:

container_image(
    name = "with_empty_dirs",
    empty_dirs = [
        "etc",
        "foo",
        "bar",
    ],
    names = "nginx",
)

如果我们想,我们是否需要“<a href="https://github.com/bazelbuild/rules_docker/blob/master/docs/container.md#imageimplementation" rel="nofollow noreferrer">写一个自定义的container_image”添加对 empty_dirs 所有者的支持?

4

1 回答 1

2

在 BUILD 文件中,您要查找的属性是ownername. 有关更多详细信息,请参阅pkg_tar 参考文档文档。另外,我认为您不能直接将其传递给container_image,您必须先创建一个单独的pkg_tar。像这样:

pkg_tar(
    name = "with_empty_dirs_tar",
    empty_dirs = [
        "etc",
        "foo",
        "bar",
    ],
    ownername = "nginx.nginx",
)

container_image(
    name = "with_empty_dirs",
    tars = [":with_empty_dirs_tar"],
)

通常,container_image具有pkg_tar作为直接属性的子集来制作添加文件的简单形式,但对于复杂的用例,您应该pkg_tar自己创建一个,以便完全访问其所有功能,以添加/排列文件并设置其所有权。

您在 PR 中看到的names是 Python 辅助工具中的一个变量,BUILD 文件规则将其用作实现的一部分。在 BUILD 文件中编写的内容与 Python 代码之间存在一个抽象层。

于 2021-06-28T23:55:23.423 回答