linux Docker -无法执行复制的可执行文件

eyh26e7m  于 2023-03-29  发布在  Linux
关注(0)|答案(1)|浏览(209)

我在Go项目的src目录下有一个docker文件。我通过运行GOOS=linux go build -o main cmd/*.go Dockerfile预构建了可执行文件:

FROM alpine:latest
COPY main .
COPY configs/. .
EXPOSE 8081
CMD ["/main"]

Docker构建它没有任何错误,但是当尝试用docker run -p 8081:8081 -it myService启动容器时,我得到了:exec /main: no such file or directory
我通过docker export检查了容器文件,主可执行文件在根文件夹中,但docker说没有这样的文件或目录。我尝试将/main更改为.main,但没有帮助。

qxgroojn

qxgroojn1#

您的工作目录不是必需的/目录。
因此,您应该使用CMD ["./main"]而不是CMD ["/main"]COPY main /main而不是COPY main .
重要的一点是:你应该在你的Dockerfile中编译你的二进制文件,而不是复制这个。如果你只是复制二进制文件,它将取决于你编译它的初始环境,并且可能与你的Dockerfile中使用的os不兼容。
试试这样的:

FROM alpine:latest

WORKDIR /app

COPY ./ ./

RUN go mod download
RUN go build -o /main

EXPOSE 8080

CMD [ "/main" ]

相关问题