【问题标题】:Copy directory containing Bazel build file to Docker container将包含 Bazel 构建文件的目录复制到 Docker 容器
【发布时间】:2021-11-12 02:42:48
【问题描述】:

我正在尝试将目录复制到我的 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"]
)

pkg_tar 中的 src 在我 bash 进入容器时不会被复制,而如果我只是替换它,则会出现一些其他目录(与scripts 目录位于同一位置)。 另外,如果我删除所有 Bazel build files from the scripts` 目录,那么它会被复制。

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

【问题讨论】:

    标签: docker bazel bazel-rules


    【解决方案1】:

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

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

    在源目录的根目录(你要复制到容器中)放置/编辑 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 = "/"
    )
    

    为什么我不能只复制任何目录而不进行上述更改仍然让我感到困惑。

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多