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

Docker容器启动失败:缺失libcurl.so.4的解决方案求助

问题排查与解决方案

核心问题分析

  1. 运行镜像缺少依赖库:你仅在构建阶段(rust:1.64.0-buster)安装了libcurl4,但最终运行容器使用的debian:buster-slim是精简版镜像,默认不包含libcurl这类系统级共享库,导致启动时无法找到libcurl.so.4。
  2. 二进制文件路径错误:cargo build默认生成debug版本二进制,路径为target/debug/linkedin,但你将其复制到了target/release/linkedin路径下,虽然这不是当前报错的直接原因,但会导致后续执行错误路径的文件。

修正后的Dockerfile

FROM rust:1.64.0-buster AS builder
WORKDIR /app

ARG TOKEN
ARG DATABASE_URL

RUN git config --global url."https://${TOKEN}:@github.com/".insteadOf "https://github.com/"

COPY . .

ENV CARGO_NET_GIT_FETCH_WITH_CLI true

RUN rustup component add rustfmt
RUN apt-get update -y && apt-get install git wget ca-certificates curl gnupg lsb-release cmake libcurl4 -y

# 构建release版本二进制,生成到target/release目录
RUN cargo build --release

FROM debian:buster-slim
WORKDIR /app

# 在运行镜像中安装libcurl4依赖,同时清理apt缓存减小镜像体积
RUN apt-get update -y && \
    apt-get install -y libcurl4 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# 复制正确的release版本二进制
COPY --from=builder /app/target/release/linkedin /app/linkedin
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

# 直接执行根目录下的二进制,避免路径冗余
CMD ["/app/linkedin"]
EXPOSE 3000

关键修改说明

  • 构建release版本:添加--release参数生成正式环境用的优化二进制,同时对应复制正确的路径。
  • 运行阶段安装依赖:在debian:buster-slim中安装libcurl4,确保运行时能找到所需的共享库。
  • 清理apt缓存:安装依赖后执行apt-get clean和删除lists目录,避免镜像体积过大。
  • 简化二进制路径:将二进制直接复制到/app/下,减少路径层级,避免执行时的路径错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:00:53