Featured image of post 解决Rust二进制程序无法部署在Alpine容器中的问题

解决Rust二进制程序无法部署在Alpine容器中的问题

使用Rust开发的程序通过cargo build构建成功后在Ubuntu环境中运行良好,但当通过Docker使用Alpine容器部署该程序时,Dockerfile文件如下

封面来源 Unsplash

问题介绍

使用Rust开发的程序通过cargo build构建成功后在Ubuntu环境中运行良好,但当通过Docker使用Alpine容器部署该程序时,Dockerfile文件如下:

FROM alpine
COPY ./app /root/lib
ENTRYPOINT ["/root/lib"]

构建镜像正常,但当运行镜像时发生以下错误:

Error loading shared library libgcc_s.so.1: No such file or directory (needed by ./lib)

解决方案

在Alpine容器中安装libgcc

apk add --no-cache -U libgcc

即将Dockerfile更改为下:

FROM alpine
COPY ./app /root/lib
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
RUN apk add --no-cache -U libgcc
ENTRYPOINT ["/root/lib"]

参考内容

SIGSEGV with program linked against OpenSSL in an Alpine container - help - The Rust Programming Language Forum (rust-lang.org)

解决Alpine上Rust无法使用过程宏的方法 - 知乎 (zhihu.com)