docker - 我的 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
解决方案
alpine:latest
是一个小型 Linux docker 映像 - 因此它缺少一些glibc
在使用 CGO_ENABLED=1 构建 Go 程序时所需的核心库(默认的 go 构建模式)。alpine
使用musl libc)。
设置CGO_ENABLED=0
修复了某些应用程序构建的问题 - 如果它们没有 CGO 要求。由于这在这里有效,您可以希望利用scratch
docker 图像来创建一个小图像 ( ~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/sh
shell 解释器 - 这在准系统scratch
映像中不可用。
推荐阅读
- javascript - 为对象数组中的每个唯一用户名生成平均时间
- php - 在 WooCommerce 中更改订单运费总额
- python-3.x - Pandas 根据当前值计算数据列的新值
- teradata - Teradata SQL 语法错误:无效的 FORMAT 字符串 'hh:mi:ss.s(7)'
- github - 如何在 GitHub 表格中使用较小的字体?
- docker - Dockerfile 在 azure devops 中实施时面临问题
- android - MVVM - 从存储库类检索后在哪里格式化数据?
- php - 在 Windows Nanoserver 上安装 PHP 7.3 NTS-64 需要哪些 DLL?
- python - 使用用户输入在python中循环和求和
- mysql - 如何在 MySQL 中将已删除的值设置为变量