首页 > 解决方案 > 我的 Dockerize go 应用程序不工作。错误:/bin/sh: ./crawler: 未找到

问题描述

我用 golang 写了一个程序来解析一些网站。它工作正常。然后我对这个程序进行了docker化并尝试运行它。现在它显示以下错误:

/bin/sh:./crawler: 未找到

有我的 Dockerfile

FROM golang:1.16-buster AS build

WORKDIR /github.com/Hudayberdyyev/crawler
COPY . .

RUN go mod download

RUN GOOS=linux go build -o crawler cmd/main.go

FROM alpine:latest

WORKDIR /

COPY --from=build /github.com/Hudayberdyyev/crawler/crawler /crawler

CMD ./crawler

我怎样才能找到问题的原因。我的操作系统 linux-server.20.04

标签: dockergo

解决方案


alpine:latest是一个小型 Linux docker 映像 - 因此它缺少一些glibc在使用 CGO_ENABLED=1 构建 Go 程序时所需的核心库(默认的 go 构建模式)。alpine使用musl libc)。

设置CGO_ENABLED=0修复了某些应用程序构建的问题 - 如果它们没有 CGO 要求。由于这在这里有效,您可以希望利用scratchdocker 图像来创建一个小图像 ( ~11MB):

FROM scratch

WORKDIR /

COPY --from=build /github.com/Hudayberdyyev/crawler/crawler /crawler

CMD ["/crawler"]

请注意,最后CMD一行更改很重要 - 来自docker CMD 文档

CMD ["executable","param1","param2"] (执行形式,这是首选形式)

作为:

CMD ./crawler

将尝试使用/bin/shshell 解释器 - 这在准系统scratch映像中不可用。


推荐阅读