根据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
帮助?谢谢!
答案 0 :(得分:3)
默认情况下,您正在为主机平台构建,因此如果您想这样做,则需要为容器平台构建。
由于您使用的是go二进制文件,因此可以通过在命令行上指定--cpu=k8
来进行交叉编译。理想情况下,我们只能说docker镜像需要一个linux二进制文件(因此不需要指定--cpu命令行标志),但这仍然是Bazel正在进行的工作。