将包含 Bazel 构建文件的目录复制到 Docker 容器

Copy directory containing Bazel build file to Docker container

我正在尝试将目录复制到我的 docker 容器中。我注意到,如果源目录包含 bazel 构建文件,那么该目录不会被复制。

源代码:

load("@io_bazel_rules_docker//container:container.bzl", "container_image", "container_layer")
load("@io_bazel_rules_docker//docker/util:run.bzl", "container_run_and_commit")
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")

container_run_and_commit(
    name = "bitnami-grafana-base",
    commands = [
        "tdnf install yum -y",
    ],
    image = "@photon_base_image//image"
)

pkg_tar(
    name = "scripts-dir",
    srcs = glob(["scripts/**"]),
    strip_prefix = ".",
    package_dir = "/"
)


container_image(
    name = "bitnami-grafana",
    base = ":bitnami-grafana-base_commit.tar",
    visibility = ["//visibility:public"],
    files = ["test.sh"],
    workdir = "/",
    tars = [":scripts-dir"],
    cmd = ["/test.sh"]
)

当我 bash 进入容器时,pkg_tar 中的 src 不会被复制,而如果我只是将它替换为其他目录(与 scripts 目录)出现。 另外,如果我删除所有 Bazel build files from the scripts` 目录,它就会被复制。

那么,如果包含 Bazel 个文件,为什么目录不会被复制? 如何复制这些目录?

我知道一部分,不确定这是否是最好的方法。

问题:如何复制包含 bazel 构建文件的目录。 答案:

在源目录的根目录中(您要将其复制到容器中)put/edit bazel 构建文件并将以下内容添加到此 bazel 构建文件中:

filegroup(
    name = "scripts_dir",
    srcs = glob([
        "**/*",
    ]),
)

以上将获取所有文件,您可以在其他 bazel 构建文件中引用 //something/something/scripts:scripts_dir

然后在创建容器并复制目录的构建文件中添加: 此构建文件的其余部分,请参阅问题。

pkg_tar(
    name = "scripts-dir",
    srcs = [
        "//something/something/scripts:scripts_dir",
    ],
    strip_prefix = ".",
    package_dir = "/"
)

为什么我不能在不进行上述更改的情况下复制任何目录,这仍然困扰着我。