【问题标题】:How to run Bazel container images on OSX?如何在 OSX 上运行 Bazel 容器镜像?
【发布时间】:2017-11-21 18:39:37
【问题描述】:

根据 bazelbuild/rules_docker 上的文档,应该可以在 OSX 上使用这些容器映像,并且它还声称可以在没有 docker 的情况下这样做。

These rules do not require / use Docker for pulling, building, or pushing images. This means:

They can be used to develop Docker containers on Windows / OSX without boot2docker or docker-machine installed.
They do not require root access on your workstation.

我该怎么做?这是一个简单的规则:

go_image(
    name = "helloworld_image",
    importpath = "github.com/nictuku/helloworld",
    library = ":go_default_library",
    visibility = ["//visibility:public"],
)

我可以使用bazel build :helloworld_image构建图像。它会在 blaze-bin 中生成一个 tar 球,但不会运行它:

INFO: Running command line: bazel-bin/helloworld_image
Loaded image ID: sha256:08d312b529d30431c68741fd3a31468a02533f27a8c2c29eedc969dae5a39852
Tagging 08d312b529d30431c68741fd3a31468a02533f27a8c2c29eedc969dae5a39852 as bazel:helloworld_image
standard_init_linux.go:185: exec user process caused "exec format error"
ERROR: Non-zero return code '1' from command: Process exited with status 1.

它试图运行 linux 这是 OSX,这很愚蠢。

我还尝试对 .tar 内容执行“docker load”,但它似乎不喜欢这种格式。

$ docker load -i bazel-bin/helloworld_image-layer.tar 打开/var/lib/docker/tmp/docker-import-330829602/app/json:没有这样的文件或目录

帮助?谢谢!

【问题讨论】:

    标签: bazel


    【解决方案1】:

    默认情况下,您正在为您的主机平台构建,因此如果您想这样做,您需要为容器平台构建。

    由于您使用的是 go 二进制文件,因此您可以通过在命令行中指定 --cpu=k8 来进行交叉编译。理想情况下,我们可以只说 docker 映像需要一个 linux 二进制文件(因此无需指定 --cpu 命令行标志),但这仍在 Bazel 中进行中。

    【讨论】:

    • 目前的状态如何?我面临类似的情况,我想在我的 mac os 上构建 x86_64 linux 二进制文件,你有示例或指针代码吗?
    • 我不再为 Bazel 工作,所以我不知道。我建议您在 rules_docker 上提出问题,因为他们也了解 Bazel 跨平台故事。作为 rules_rust 的贡献者,我知道并非所有平台都适用于跨平台构建(例如,rules_rust 可能不会)。
    猜你喜欢
    • 2022-01-26
    • 2015-07-28
    • 2018-01-04
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    相关资源
    最近更新 更多