如何在OSX上运行Bazel容器映像?

时间:2017-11-14 23:06:00

标签: bazel

根据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 构建图像。它在火焰箱中产生焦油球,但它不会运行它:

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,这很愚蠢。

我也尝试过#34; docker load"关于.tar内容,但似乎并不喜欢这种格式。

$ docker load -i bazel-bin/helloworld_image-layer.tar
open /var/lib/docker/tmp/docker-import-330829602/app/json: no such file or directory

帮助?谢谢!

1 个答案:

答案 0 :(得分:3)

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

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