【问题标题】:Why does container work in Docker but no in GKE为什么容器在 Docker 中工作但在 GKE 中不工作
【发布时间】:2023-01-18 20:45:13
【问题描述】:

我有一个 Containerfile 安装一个 go 二进制文件[1].

当我在桌面上通过 docker run 构建并执行容器时,它工作正常。 但是,当我在 GKE pod 上部署相同的容器时,出现错误: /bin/sh: /root/service: not found

我假设这是一种安全锁定——但不确定如何让它在 GKE 上运行。

[1]:

FROM golang:1.19-alpine AS build

RUN go install github.com/QubitProducts/exporter_exporter@v0.4.5


FROM alpine

COPY --from=build --chown=root:root /go/bin/exporter_exporter /root/service

CMD /root/service

【问题讨论】:

  • 对我来说,错误是 exec /bin/sh: exec format error not found 可能是由于缺少二进制文件或文件,exec 格式错误,因为我在 Mac m1 ARM 上构建并在 GKE 节点的 AMD 进程上运行它,所以希望它对你来说不一样。对我来说,docker 在本地运行,但由于处理器平台更改而出现错误。请检查一次not found 可能是由于在 CMD 命令最后一行创建了一半的构建或文件丢失。

标签: containers google-kubernetes-engine


【解决方案1】:

这是因为您的容器的卷权限问题。当您在 docker 中运行您的容器时,docker 守护进程将有权访问 root 并且运行您的容器不会抛出任何错误,因为该守护进程已经具有 root 访问权限。在 kubernetes 中,pod 和容器默认没有 root 访问权限,因此在为 kubernetes 构建映像时,您需要提及安装根卷和在根卷上执行代码所需的配置映射。

这种情况类似于 gke 和其他云托管的 kubernetes 引擎。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    相关资源
    最近更新 更多