我有去网络应用程序,我试图部署在Docker上,但我一直得到这个消息。我运行这个在Windows 10企业第11代英特尔(R)酷睿(TM)i7- 1185G7@3. 00 GHz 64位Docker文件
FROM golang:latest
RUN mkdir /app
COPY bin/main /app/main
WORKDIR /app
CMD ["/app/main"]
生成文件
GOOS=linux
GOARCH=amd64
build:
go build -o bin/main main.go
run:
go run main.go
compile:
echo "Compiling for every OS and Platform"
GOOS=linux GOARCH=arm go build -o bin/main-linux-arm main.go
GOOS=linux GOARCH=arm64 go build -o bin/main-linux-arm64 main.go
GOOS=freebsd GOARCH=386 go build -o bin/main-freebsd-386 main.go
我正在运行此命令
go build -o bin/main main.go
docker build -t tiny .
docker run -p 127.0.0.1:8080:8080 tiny
获取时出错:执行/应用程序/主目录:执行格式错误
日志文件。严重错误(http.listenAndServe(“:8080”,nil))
1条答案
按热度按时间brjng4g31#
当你的Dockerfile说
您正在将一个构建在Windows主机系统上的
main
二进制文件复制到Linux Docker映像中。由于操作系统不匹配,您将收到“exec format error”(执行格式错误)消息。在构建Docker映像时,通常会在Docker文件中执行编译步骤。在Go语言这样的编译语言中,更常见的方法是使用multi-stage build,这样Go工具链本身就不是最终映像的一部分;这会给您一个小得多的映像,并且不会将源代码重新发布给最终用户。
这种方法忽略了Makefile,它实际上并没有使用任何Make特性(例如,没有任何地方一个规则依赖于另一个规则,如果规则的输出文件已经存在,也没有任何地方可以跳过规则的执行)。这个特定的Dockerfile构建一个动态链接的二进制文件,并确保构建和执行阶段使用相同Linux发行版的相同主版本,因此使用相同的SystemC库。