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

Docker中安装git覆盖curl库丢失sftp支持的问题如何解决?

问题原因

curlimages/curl:7.79.1 镜像中的 curl 是官方自定义编译的版本,集成了 libssh2 支持所以可以使用 sftp 协议,这个自定义版本没有通过 Alpine 的 apk 包管理器安装。
你执行 apk add git 时,git 依赖 libcurl 库,apk 会自动从 Alpine 官方源拉取标准版本的 libcurl 和 curl 包,直接覆盖了镜像中原有的自定义编译的 curl 相关文件:

  • 标准 Alpine 源的 libcurl 默认没有编译 libssh2 模块,因此丢失 sftp 支持
  • 原有自定义 curl 二进制和新安装的标准 libcurl 版本不匹配,就出现了你看到的版本不匹配警告

修复方案

两种常用修复方式任选其一即可:

方案1:安装git时禁止apk升级已存在的libcurl

执行 apk 安装命令时添加 --no-upgrade 参数,指定不更新系统中已存在的 libcurl,避免覆盖自定义版本:

FROM curlimages/curl:7.79.1

USER root
# 关键参数:--no-upgrade libcurl 阻止apk更新已有的libcurl
RUN apk add --no-cache --no-upgrade bash git libssh2
RUN git clone https://github.com/git-ftp/git-ftp.git

USER curl_user

WORKDIR /git-ftp

ENTRYPOINT ./git-ftp push --user $FTP_USER --passwd $FTP_PASSWORD $FTP_HOST

额外添加 libssh2 是确保依赖库存在,避免自定义 curl 运行时找不到库文件。

方案2:先安装git再编译安装带sftp支持的curl

如果方案1因为依赖冲突无法使用,可以换用 Alpine 基础镜像,先装 git,再自行编译带 libssh2 的 curl,虽然步骤多一点但稳定性更高:

FROM alpine:3.14

RUN apk add --no-cache bash git build-base openssl-dev zlib-dev brotli-dev libssh2-dev nghttp2-dev
# 编译安装对应版本的curl,开启sftp支持
RUN curl -OL https://curl.se/download/curl-7.79.1.tar.gz && \
    tar -xzf curl-7.79.1.tar.gz && cd curl-7.79.1 && \
    ./configure --with-libssh2 --with-openssl --with-zlib --with-brotli --with-nghttp2 && \
    make && make install && cd .. && rm -rf curl-7.79.1* && \
    apk del build-base
# 安装git-ftp
RUN git clone https://github.com/git-ftp/git-ftp.git
WORKDIR /git-ftp
ENTRYPOINT ./git-ftp push --user $FTP_USER --passwd $FTP_PASSWORD $FTP_HOST

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:39:03