bash:运行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语句,它将当前容器替换为基于图像的新容器。在这种情况下,您正在执行FROM scratch,这是一个没有任何内容的容器

由于您没有使用COPY --from来复制前一阶段编译的文件,因此缺少文件./main,因此您的应用程序无法工作。

有关多级Go构建示例,请参见此处。

Dockerscratch没有像bash这样的二进制文件,基本上它是一个空上下文。CCD_ 11指令然后移除先前的层;在这种情况下,CCD_ 12文件被排除在外。

您可以使用另一个最小映像,即FROM busybox as another_container来执行./main二进制文件。

即:

ARG GO_VERSION=1.17
FROM golang:$GO_VERSION as go-container
ADD go.mod go.sum ./
RUN go mod download -x
RUN go build -o main cmd/main.go
FROM busybox as another_container
COPY --from=go-container ./main /main
ENTRYPOINT ["./main"]

完整示例:

docker-compose.yaml

version: "3.9"
services:
web:
build:
context: .
dockerfile: 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 main.go ./
RUN go mod download -x
RUN go build -o main main.go
FROM busybox as another_container
COPY --from=go-container /gopath/src/project/main .
ENTRYPOINT ["./main"]

main.go

package main
import "fmt"
func main() {
fmt.Println("Created with vim-go")
}

使用:docker compose up执行

docker compose up
[+] Running 2/2
⠿ Network delete_default  Created                                                                                                                                                                                                       0.0s
⠿ Container delete-web-1  Created                                                                                                                                                                                                       0.0s
Attaching to delete-web-1
delete-web-1  | vim-go
delete-web-1 exited with code 0

最新更新