Alpine 3.20镜像中使用iconv-go库的TRANSLIT选项报错问题排查
Alpine 3.20镜像中使用iconv-go库的TRANSLIT选项报错问题排查
我在Alpine 3.20镜像里用iconv-go库的TRANSLIT选项时碰到了问题,折腾半天没搞定,来求助大家!
下面是能重现问题的完整代码和配置:
main.go
package main import ( "fmt" iconv "github.com/djimenez/iconv-go" ) func main() { output := make([]byte, 20) nRead, nWrite, err := iconv.Convert([]byte("éé"), output, "UTF-8", "ASCII//TRANSLIT") fmt.Println(nRead, nWrite, err) }
go.mod
module truc go 1.22.4 require github.com/djimenez/iconv-go v0.0.0-20160305225143-8960e66bd3da // indirect
Dockerfile
FROM golang:1.22-alpine3.20 as builder RUN apk --no-cache add build-base gnu-libiconv-libs WORKDIR /src # 先复制go mod文件,利用缓存减少重复下载依赖的时间 COPY ./go.* ./ RUN go mod download COPY . . RUN go build -o "test-iconv" . FROM alpine:3.20 as runtime RUN apk --no-cache add gnu-libiconv-libs COPY --from=builder /src/test-iconv /app/ RUN adduser connector --disabled-password && chown connector. -R /app && chmod 700 "/app/test-iconv" USER connector ENTRYPOINT ["/app/test-iconv"]
运行命令
docker build . -t test-iconv && docker run test-iconv
我本来预期的输出应该是:
4 2 nil
但实际运行后得到的却是:
0 0 invalid argument
有意思的是,如果把构建和运行的镜像换成基于Ubuntu的golang:1.22,这个问题就完全消失了,可镜像体积直接从18MB涨到了800MB,实在太臃肿了,还是想用Alpine的轻量镜像。
有没有大佬知道我在Alpine的配置里漏掉了什么?麻烦指点一下,谢谢啦!
备注:内容来源于stack exchange,提问作者Lindmin
相关产品推荐
相关产品推荐

