将包含 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 = "/"
)
为什么我不能在不进行上述更改的情况下复制任何目录,这仍然困扰着我。
我正在尝试将目录复制到我的 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 = "/"
)
为什么我不能在不进行上述更改的情况下复制任何目录,这仍然困扰着我。