Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang docker多阶段生成无法运行:exec:“;go";:在$PATH中找不到可执行文件_Docker_Go - Fatal编程技术网

Golang docker多阶段生成无法运行:exec:“;go";:在$PATH中找不到可执行文件

Golang docker多阶段生成无法运行:exec:“;go";:在$PATH中找不到可执行文件,docker,go,Docker,Go,使用Docker多级构建部署简单API时,会引发以下错误: $docker build-tapi:最新版本。 [...] $docker run-p4880:4880--rm--name=api:latest 2019/01/29 23:02:15 exec:“go”:在$PATH中未找到可执行文件 由于我的应用程序没有从任何地方调用go(或任何exec.Command),因此我运行了一个go mod vendor,以便检查依赖项源代码并发现以下内容: vendor/github.com/li

使用Docker多级构建部署简单API时,会引发以下错误:

$docker build-tapi:最新版本。
[...]
$docker run-p4880:4880--rm--name=api:latest
2019/01/29 23:02:15 exec:“go”:在$PATH中未找到可执行文件
由于我的应用程序没有从任何地方调用
go
(或任何
exec.Command
),因此我运行了一个
go mod vendor
,以便检查依赖项源代码并发现以下内容:

vendor/github.com/lib/pq/oid/gen.go
12:     "os/exec"
64:     cmd := exec.Command("gofmt")
这可能是问题所在吗?如果是,我如何解决?我确信我以前已经成功地在多阶段构建中部署了
github.com/lib/pq
,但我现在被卡住了

非常感谢和快乐的黑客

Dockerfile

FROM golang:1-alpine AS builder
ENV GO111MODULE=on
RUN apk --no-cache add ca-certificates git
WORKDIR /app
# Copy go module info first...
COPY go.mod .
COPY go.sum .
# ...then download to cache dependencies between builds
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -installsuffix cgo -ldflags '-extldflags "-static"' -o api cmd/api/

FROM scratch
WORKDIR /app
COPY --from=builder /app/api /app/
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
EXPOSE 8080
ENTRYPOINT ["./api"]

您的实际构建线:

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build-installsuffix CGO-ldflags'-extldflags'-static'-o api cmd/api/

cmd
前面缺少相对路径,将其改为
/cmd/api
将导致成功生成/运行
cmd/api
显然是一个真实的东西,所以它不会出错,也不会做您期望它做的事情。如果您在终端中键入
go run cmd/api
,您应该会看到大量与应用程序无关的输出。

您是否可以确保
api
可执行文件是从
builder
复制的?您可以在构建期间在Dockerfile的第二阶段运行
run ls-la
来确认这一事实,即正在运行
api
测试,可以跳过scratch,在构建容器中运行api二进制文件,看看会发生什么。可能会穿上一些clueSpot-谢谢!我花了太长时间试图找出我的本地版本和docker版本之间的区别。再次感谢