gpt4 book ai didi

docker - 如何从二进制文件在docker上运行go server

转载 作者:IT王子 更新时间:2023-10-29 01:44:10 27 4
gpt4 key购买 nike

我一直在尝试制作一个 Dockerfile,它可以让我将我的 go 服务器构建为二进制文件,然后从 scratch 镜像或 alpine 运行它。服务器在本地运行良好,在 macOS 10.13.5 上,当它不是来自 Docker 上的二进制文件时我让它工作。

我一直收到这个错误:

standard_init_linux.go:190: exec user process caused "exec format error"

我一直在谷歌搜索并找到了一些关于系统架构的信息。我不确定如何检查这是否是错误和/或如何修复它。

非常感谢任何有关调试或可能修复的提示。

我的 Dockerfile:

FROM golang:1.10.3 as builder
WORKDIR /go/src/gitlab.com/main/server
COPY . .
RUN go get -d -v ./...
RUN CGO_ENABLED=0 GOOS=linux go build -a -o main .

FROM scratch
ADD main /
CMD ["/main"]

输出:

Building go
Step 1/9 : FROM golang:1.10.3 as builder
---> 4e611157870f
Step 2/9 : WORKDIR /go/src/gitlab.com/main/server
Removing intermediate container 20cd4d66008b
---> 621d9fc02dde
Step 3/9 : COPY . .
---> cab639571baf
Step 4/9 : RUN go get -d -v ./...
---> Running in 7681f9adc7b2
Removing intermediate container 7681f9adc7b2
---> 767a4c9dfb94
Step 5/9 : RUN go build -a -installsuffix cgo -o main .
---> Running in a6ec73121163
Removing intermediate container a6ec73121163
---> b9d7d1c0d2f9
Step 6/9 : FROM alpine:latest
---> 11cd0b38bc3c
Step 7/9 : WORKDIR /app
---> Using cache
---> 6d321d334b8f
Step 8/9 : COPY . .
---> 048a59fcdd8f
Step 9/9 : CMD ["/app/main"]
---> Running in d50d174644ff
Removing intermediate container d50d174644ff
---> 68f8f3c6cdf7
Successfully built 68f8f3c6cdf7
Successfully tagged main_go:latest
Creating go ... done
Attaching to go
go | standard_init_linux.go:190: exec user process caused "exec format error"
go exited with code 1

最佳答案

正如@tgogos 指出的那样,我是否需要使用我在第一步中构建的内容。

我的最终 Dockerfile 像这样结束了一些进一步的改进:重要的部分是倒数第二行:

FROM golang:1.10.3 AS build
WORKDIR /go/src/gitlab.com/main/server
COPY . .
RUN go get github.com/golang/dep/cmd/dep && \
dep ensure && \
rm -f schema/bindata.go && \
go generate ./schema
RUN CGO_ENABLED=0 GOOS=linux go build -a -o main .

FROM alpine
RUN apk add --no-cache ca-certificates
COPY --from=build /go/src/gitlab.com/main/server/main .
CMD ["/main"]

关于docker - 如何从二进制文件在docker上运行go server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51358411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com