我有一个src / BUILD.bazel(在MacO上):
load("@io_bazel_rules_docker//go:image.bzl", "go_image")
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
load("@io_bazel_rules_docker//container:container.bzl", "container_image")
go_image(
name = "bazel_docker_image",
srcs = ["main.go"],
pure = "on",
)
该作品的使用没有错误:
bazel build //src:bazel_docker_image
显示:
INFO: Analyzed target //src:bazel_docker_image (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //src:bazel_docker_image up-to-date:
bazel-bin/src/bazel_docker_image-layer.tar
INFO: Elapsed time: 2.361s, Critical Path: 0.03s
INFO: 0 processes.
INFO: Build completed successfully, 1 total action
但是tar文件(可以作为映像导入docker)仅包含静态链接任务。该图像不能作为容器运行,因为该图像除其他外不包含
/usr/lib/libSystem.B.dylib
那么@ go_image_base // image的意义是什么?我认为这应该可以构成一个基本上完整的独立映像,其中包含所有必需的库,有效的入口点等。
如果在bazel-bin / external / go_image_static / image / 000.tar.gz.nogz中查找,看起来Bazel具有完整的图像,更像是Bazel文档似乎建议输出的图像。是什么赋予了?
此外,Bazel文档提到:
To address this, we publish variants of the distroless runtime images
tagged :debug, which are the exact-same images, but with additions
such as busybox to make debugging easier.
,但不提供示例。
在这一点上,我最好从高山上制作一个容器映像,然后自己做所有事情。我真的很想解决这个问题,因为Bazel通常会使Docker的工作变得更容易。