【发布时间】:2021-09-22 19:52:21
【问题描述】:
我正在尝试运行此Dockerfile with distroless image (gcr.io/distroless/static:nonroot)。 docker build 成功发生,但 docker run -it image_name 给我错误:
2021-07-13T18:16:11.441Z ERROR controller-runtime.client.config unable to get kubeconfig {"error": "could not locate a kubeconfig"}
github.com/go-logr/zapr.(*zapLogger).Error
/go/pkg/mod/github.com/go-logr/zapr@v0.1.0/zapr.go:128
sigs.k8s.io/controller-runtime/pkg/client/config.GetConfigOrDie
/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.4.0/pkg/client/config/config.go:146
main.main
/workspace/main.go:63
runtime.main
/usr/local/go/src/runtime/proc.go:203
调试结果
- 如果我删除最后一行
ENTRYPOINT ["/manager"]则保留 distroless 映像,然后docker run -it image_name给出错误为-:docker: Error response from daemon: No command specified. See 'docker run --help'。
同样的docker run命令适用于 distroless(带 ENTRYPOINT 行)但不适用于 distroless(不带 ENTRYPOINT 行) - 我用
alpine:latest替换了 distroless 映像。这里有ENTRYPOINT ["/manager"](&没有USER nonroot:nonroot)我看到与上面相同的错误ERROR controller-runtime.client.config unable to get kubeconfig...但是没有ENTRYPOINT行,我可以使用docker run -it image_name登录到容器。
请告诉我如何解决这个问题,这样我就可以让这个 dockerfile 像在 Dockerfile 中一样使用所有必需的配置运行。
注意:我担心我的 egress-operator pod 可能无法通过更改镜像名称来运行,因为它可能导致错过 dockerfile 中的任何配置以使其运行。
【问题讨论】:
-
在该镜像中,有一个操作员想要与 Kubernetes 交互?它可能期望一个位于 kubeconfig 文件的 KUBECONFIG env var 来连接到 Kubernetes
-
您引用的错误消息似乎是来自您的应用程序的错误(正如@AandD 所暗示的,也许是 Kubernetes 控制器?),这意味着 Docker 级别的接线可能或多或少是正确的。您是否有关于如何将 Kubernetes 凭据注入容器的问题?还是别的什么?
-
@David-: 我想修复这个错误,以便 dockerfile 成功运行。
-
ENTRYPOINT[/manager] 命令在做什么?它会 cd 到 /manager 文件夹还是( ./manager )文件?只是想确认它的正确与否
标签: docker go kubernetes dockerfile kubeconfig