docker - 将Go Server作为Docker容器运行时权限被拒绝错误

标签 docker go google-cloud-platform google-cloud-run

我想将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/

相关文章:

google-cloud-storage - 谷歌云存储是一个自动的全局 CDN 吗?

elasticsearch - Docker 卷访问错误

docker - 带有 Expo dockerized 应用程序的 Metro bundler 无法正常工作

go - 如何在DynamoDB UpdateItem中更新数组对象

ubuntu - 谷歌云虚拟机中的 apt-get 命令

nginx - Nginx入口 Controller 如何在Kubernetes上工作?

Docker 无法删除已经存在的网络

bash - 如何在 Docker 容器中挂载主机目录

go - 如何从golang的[] interface {}中提取 slice

go - 在 go 中使用回调和函数作为类型