我想将Go服务器部署到Google Cloud Run。我从this指南中复制了Dockerfile。
FROM golang:1.13 as builder
WORKDIR /app
COPY go.* ./
RUN go mod download
COPY . ./
RUN CGO_ENABLED=0 GOOS=linux go build -v -o server
RUN chmod a+x server
FROM alpine:3
RUN apk add --no-cache ca-certificates
COPY --from=builder /app/server /server
CMD ["/server"]
在将其部署到Cloud Run之前,我想通过使用
docker build -t server .
构建镜像并使用docker run server
运行容器在本地进行测试。失败并显示以下错误:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"/server\": permission denied": unknown.
谢谢你的帮助。
最佳答案
潜在问题1
如果将alpine
更改为debian
对您有用,则意味着这是交叉编译的问题。golang
图像基于debian,并使用glibc,alpine
图像使用musl libc。有时这些不兼容,并使其自身暴露于最糟糕的错误消息中。
因此,我怀疑这不是Cloud Run问题,而是之前的问题。为了进行验证,您还可以像在Cloud Run上运行容器一样本地运行https://cloud.google.com/run/docs/testing/local
潜在问题2
一次类似的事情发生在我身上,结果证明我正在构建的软件包不是package main
。因此,我没有生成可执行的二进制文件,而是生成了一个目标文件(.o),当然,无论我多么“chmod + x”,它都不会启动。
验证您实际构建的go软件包路径是package main
。
关于docker - 将Go Server作为Docker容器运行时权限被拒绝错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60766388/