我正在尝试为 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
帮助解决我的问题。
您的二进制文件位于
./data/bin
。
然后将 PVC 安装在其上
mountPath: /data
有效地将其移除。
解决方案是将二进制文件放在其他地方。
我鼓励您考虑:
bin
以外的名称。虽然在这种情况下它不会导致问题,但它可能会产生问题并且是非描述性的。ENTRYPOINT ["/path/to/you/binary"]
而不是 CMD [...]
。这已被广泛记录(包括 Docker 的 ENTRYPOINT
)。