You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker运行Rust构建的mapservice缺失libssl.so.1.1依赖求助

问题描述

我是Docker新手,首次遇到此类错误。以下是我的Dockerfile:

FROM rust:latest as builder
ENV APP mapservice
WORKDIR /usr/src/$APP
COPY . .
RUN cargo install --path .
 
FROM debian:buster-slim
RUN apt-get update && rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local/cargo/bin/$APP /usr/local/bin/$APP
#export this actix web service to port 8080 and 0.0.0.0
EXPOSE 8080
CMD ["mapservice"]

执行命令:

docker run -it --rm -p 8080:8080 mapservice

出现错误:

mapservice: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

不清楚错误原因,是否与main.rs硬编码APIKEY有关?设备为M1 Pro Mac,求解决方法。另外,类似Dockerfile的示例项目运行正常,部署到AWS时还出现8080端口健康检查错误,是否是Dockerfile存在问题?

解决方法

1. 修复libssl依赖缺失问题

这个错误和main.rs里的APIKEY硬编码完全无关,核心原因是debian:buster-slim基础镜像没有预装OpenSSL 1.1运行库,而你的Rust程序编译时依赖了OpenSSL,导致运行时找不到对应的动态库。

修改Dockerfile的debian阶段,添加依赖安装步骤:

FROM rust:latest as builder
ENV APP mapservice
WORKDIR /usr/src/$APP
COPY . .
RUN cargo install --path .
 
FROM debian:buster-slim
# 安装libssl1.1和证书文件(如果程序需要发起HTTPS请求)
RUN apt-get update && apt-get install -y --no-install-recommends libssl1.1 ca-certificates \
    && rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local/cargo/bin/$APP /usr/local/bin/$APP
EXPOSE 8080
CMD ["mapservice"]

另外,M1 Pro是ARM架构,如果你需要跨架构构建(比如在本地ARM机器上构建x86镜像部署到AWS),可以在builder阶段指定平台:

FROM --platform=linux/amd64 rust:latest as builder

2. 解决AWS健康检查失败问题

健康检查通不过大概率是你的Actix Web服务没有绑定到0.0.0.0,而是默认绑定了127.0.0.1。这种情况下,服务只能在容器内部的localhost访问,外部(包括AWS的健康检查系统)无法连接到8080端口。

检查main.rs中的服务启动代码,确保绑定地址是0.0.0.0:8080,示例代码如下:

HttpServer::new(|| {
    App::new()
        // 这里添加你的路由逻辑
})
.bind(("0.0.0.0", 8080))?
.run()
.await?;

注意:Dockerfile里的EXPOSE只是声明容器要开放的端口,不会改变服务的实际绑定地址,关键还是代码里的配置。

内容的提问来源于stack exchange,提问作者Eugene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:55:36