我试图用git创建一个Docker映像,这样我就可以部署到sftp服务器上。
git-ftp需要用libssh2编译的git和curl,这通常不包括在内,所以我从sftp支持的curl中找到了一个Docker映像:
% docker run --rm curlimages/curl:7.79.1 --version
curl 7.79.1-DEV (x86_64-pc-linux-musl) libcurl/7.79.1-DEV OpenSSL/1.1.1l zlib/1.2.11 brotli/1.0.9 libssh2/1.9.0 nghttp2/1.43.0
Release-Date: [unreleased]
Protocols: dict file ftp ftps gopher gophers http https imap imaps mqtt pop3 pop3s
rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli HSTS HTTP2 HTTPS-proxy IPv6 Largefile libz NTLM
NTLM_WB SSL TLS-SRP UnixSockets但是,使用它作为我的Dockerfile中的基本映像,在安装git之后,我失去了sftp支持:
FROM curlimages/curl:7.79.1
USER root
RUN apk add --no-cache bash git
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% docker run --env FTP_USER=user --env FTP_PASSWORD=password --env FTP_HOST=sftp://localhost:22 git-ftp
fatal: Protocol 'sftp' not supported by curl, exiting...使用ENTRYPOINT作为curl --version运行将为我提供以下信息:
curl 7.79.1-DEV (x86_64-pc-linux-musl) libcurl/7.79.1 OpenSSL/1.1.1l zlib/1.2.11 brotli/1.0.9 nghttp2/1.43.0
Release-Date: [unreleased]
Protocols: dict file ftp ftps gopher gophers http https imap imaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli HSTS HTTP2 HTTPS-proxy IPv6 Largefile libz NTLM
NTLM_WB SSL TLS-SRP UnixSockets
WARNING: curl and libcurl versions do not match. Functionality may be affected.因此,突然之间,在安装git之后,我失去了sftp支持,这是我使用这个基本映像的唯一原因。
到底怎么回事?我怎么才能解决这个问题?
发布于 2021-10-17 16:15:59
我的解决方案是在安装curl之后用libssh2编译git。构建映像需要更长的时间,但它比使用Debian更轻。
发布于 2021-10-15 01:45:16
Git需要libcurl来支持HTTP和HTTPS。因为没有HTTPS支持的Git并不是很有用,所以Git的大多数发行版包都依赖于libcurl的发行版包。
在您的情况下可能发生的情况是,当您安装Git时,它的依赖项libcurl也是从发行版包中安装的。自定义libcurl安装在正常位置,没有适当的包,因此正在被覆盖,或者安装在库搜索路径后面的某个地方,并且由于发行版是首选版本而被忽略。
您应该在安装Git之前和之后运行ldd $(which curl),并找出libcurl的自定义和发行版本位于何处。如果映像正在/usr/lib下的某个地方安装libcurl,那么它就坏了:该位置是为包管理器保留的,它需要构建和安装一个正常的系统包及其自定义版本,以避免被覆盖。否则,您可能可以修改/etc/ld.so.conf以调整库的搜索路径,或者使用LD_LIBRARY_PATH环境变量对每个程序进行修改。
https://stackoverflow.com/questions/69576415
复制相似问题