docker - 重击 : No such file or directory when running a dockerfile

标签 docker go docker-compose dockerfile

我正在尝试从 dockerfiledocker-compose 文件运行容器,如下所示 -

docker-compose.yml

build:
      context: .
      dockerfile: docker/Dockerfile
      target: go-container
    entrypoint: bash -c "./main"

Dockerfile 看起来像这样 -

ARG GO_VERSION=1.17
FROM golang:$GO_VERSION as go-container
ENV GOPATH /gopath
ENV PATH $GOPATH/bin:$PATH
WORKDIR /gopath/src/project

ADD go.mod go.sum ./
RUN go mod download -x
RUN go build -o main cmd/main.go


FROM scratch as another_container
COPY --from=go-container /gopath/src/project/main .
ENTRYPOINT ["./main"]

在运行docker-compose时,我收到这样的错误 -

bash: line 1: ./main: No such file or directory
ERROR: 127

这里发生了什么?我不知道如何调试它,因此感谢任何帮助!

最佳答案

FROM scratch as another_container

您正在使用 FROM 语句,该语句将当前容器替换为基于镜像的新容器。在这种情况下,您将从头开始,这是一个里面什么也没有的容器。

由于您没有使用 COPY --from 来复制上一阶段的编译文件,因此文件 ./main 丢失,因此您的应用程序将无法运行不工作。

参见here多阶段 Go 构建示例。

关于docker - 重击 : No such file or directory when running a dockerfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73391394/

相关文章:

mysql - docker-compose up 后如何执行脚本?

php - 无法使用 docker compose 将 phpmyadmin 连接到数据库

python - 运行docker-compose build时出现UnicodeEncodeError

ubuntu - 终止容器后无法删除 Docker 的镜像

docker - 如何从Docker内部访问源代码?

json - 指向 JSON 的指针数组

go - 在 golang 中,如果其中一个方法必须具有指针接收器,是否有必要将一种类型的所有方法更改为具有指针接收器?

linux - 在 dockerized mongodb 上找不到 mongodb 配置文件

node.js - 在容器中运行挂载测试后, Istanbul 尔覆盖率未知

go - Bosun 添加外部收集器