"exec: \"go\": 在 $PATH 中找不到可执行文件"

3
我已经创建了 Dockerfile,并成功构建了它,但当我运行它时,
sudo docker run -d -it -p 15555:9888 --name=docker-golang-test goTestDocker go run main.go host=0.0.0.0
它返回了一个错误:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"go\": executable file not found in $PATH": unknown.
这是我的 Dockerfile:
FROM golang:1.10.2-alpine3.7 AS build 
RUN apk --no-cache add gcc g++ make ca-certificates
WORKDIR /home/user/Desktop/work/go-work/GoProject/project
RUN ls
RUN pwd
COPY . .
RUN pwd
RUN apk update -qq && apk add git
RUN go get github.com/golang/protobuf/jsonpb
RUN go get github.com/golang/protobuf/proto
FROM alpine:3.7
WORKDIR /usr/bin
COPY --from=build /go/bin .
EXPOSE 9888
CMD ["./app"] --v

1
你应该考虑检查 docker exec docker-golang-test which go / docker logs docker-golang-test 的输出。 - user4466350
Go镜像仅用作中间构建步骤。最终镜像是从不包含Go的FROM alpine:3.7构建的。 - Peter
sudo docker run -d -it --name=docker-golang-test goTestDocker which go 返回什么? - Hagai
1个回答

2
FROM golang:1.10.2-alpine3.7 AS build 
RUN apk --no-cache add gcc g++ make ca-certificates
WORKDIR /go/src/github.com/{$whoami}/testProject
RUN ls
RUN pwd
COPY . .
RUN pwd
RUN apk update -qq && apk add git
RUN go get github.com/golang/protobuf/jsonpb
RUN go get github.com/golang/protobuf/proto
RUN go build .

FROM alpine:3.7
WORKDIR /usr/bin
COPY --from=build /go/src/github.com/{$whoami}/testProject/testProject .
EXPOSE 9888
CMD ["./app"] --v

这是一个多阶段的Dockerfile,你需要复制项目、获取依赖并构建它,然后在第二个阶段只需运行它(通过CMD ["./app"])。

如果你想用自己的方式完成:

FROM golang:1.10.2-alpine3.7
RUN apk --no-cache add gcc g++ make ca-certificates
WORKDIR /go/src/github.com/{$whoami}/testProject
COPY . .
RUN apk update -qq && apk add git
RUN go get github.com/golang/protobuf/jsonpb
RUN go get github.com/golang/protobuf/proto

这是你想要的Dockerfile(我的建议当然是第一个,因为它只需要使用“docker run”命令即可运行)

PS:多阶段构建的Dockerfile


@GGG 你确定你的镜像中真的有Go工具链吗? 编辑:请注意,你只在“build”阶段拥有Go工具链。在主要部分中,你正在从构建中复制可执行文件并运行它。因此,在那里没有go工具是完全正常的。而且我可以看到,你已经指定了CMD,那么为什么要尝试覆盖它呢? - Berkant İpek
@Berkant,说实话,我是docker的新手,这个Dockerfile是我在网上找到的,所以我修改它以适应我的项目。 - GGG
@GGG 你最好参考这个链接:https://docs.docker.com/engine/reference/builder/ 它会详细介绍Dockerfile指令,并提供示例。 - Berkant İpek
修改了我的帖子。 - CallMeLoki
谢谢,我选择第一个,它没有出现任何错误,但是当我访问localhost:9888时,什么也没有。 - GGG
本地主机:15555 - CallMeLoki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接