Golang == 错误:OCI 运行时创建失败:无法启动容器进程:exec:“./bin”:stat ./bin:没有这样的文件或目录:未知

问题描述 投票:0回答:1

我正在尝试为 Go Application 构建此 Dockerfile,然后将其部署到 GKE,但我在创建 pod 时看到此错误。在描述这个 Pod 时,我发现了同样的错误。:

错误:创建containerd任务失败:创建shim任务失败: OCI 运行时创建失败:runc 创建失败:无法启动 容器进程: exec: "./bin": stat ./bin: 没有这样的文件或 目录:未知

使用此命令该映像在本地成功运行。

docker run -it --rm bytecode01/domainalert:v2

#Dockerfile
FROM golang:alpine as builder
WORKDIR /data

COPY go.mod go.mod
RUN go mod download

# Copy the go source
COPY . .

# Build
RUN go build -a -o bin main.go

FROM alpine:latest

WORKDIR /data
COPY --from=builder /data/bin .
RUN chmod +x bin
CMD ["./bin"]

GKE PVC 成功挂载

#pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: de
  labels:
    name: de
spec:
  containers:
    - name: de-pod
      image: bytecode01/domainalert:v2
      imagePullPolicy: Always
      volumeMounts:
        - mountPath: /data
          name: app-volume
  volumes:
    - name: app-volume
      persistentVolumeClaim:
        claimName: pvc-dynamic
#pvc-dynamic.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-dynamic
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi
  storageClassName: standard

帮助解决我的问题。

docker go kubernetes google-kubernetes-engine
1个回答
0
投票

您的二进制文件位于

./data/bin

然后将 PVC 安装在其上

mountPath: /data
有效地将其移除。

解决方案是将二进制文件放在其他地方。

我鼓励您考虑:

  1. 也为您的二进制文件使用
    bin
    以外的名称。虽然在这种情况下它不会导致问题,但它可能会产生问题并且是非描述性的。
  2. 使用
    ENTRYPOINT ["/path/to/you/binary"]
    而不是
    CMD [...]
    。这已被广泛记录(包括 Docker 的
    ENTRYPOINT
    )。
© www.soinside.com 2019 - 2024. All rights reserved.