根据 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:没有这样的文件或目录
帮助?谢谢!
最佳答案
默认情况下,您正在为您的主机平台构建,因此如果您想这样做,您需要为容器平台构建。
由于您使用的是 go 二进制文件,因此您可以通过在命令行上指定 --cpu=k8
来进行交叉编译。理想情况下,我们只能说 docker 镜像需要一个 linux 二进制文件(因此无需指定 --cpu 命令行标志),但这在 Bazel 中仍在进行中。
关于bazel - 如何在 OSX 上运行 Bazel 容器镜像?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47296732/