我正在嘗試使用git-ftp創建 Docker 映像,以便可以部署到sftp服務器。
git-ftp需要使用libssh2編譯的git和curl,這通常不包括在內,所以我從curl devs 中找到了一個帶有sftp支持的 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...
與ENTRYPOINTas 一起運行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支持,這是我使用這個基礎鏡像的唯一原因。
這是怎么回事?我怎樣才能解決這個問題?
uj5u.com熱心網友回復:
Git 需要 libcurl 來支持 HTTP 和 HTTPS。因為沒有HTTPS支持的Git不是很有用,所以Git的大多數發行版包都依賴于libcurl的發行版包。
在您的情況下可能發生的情況是,當您安裝 Git 時,它的依賴項 libcurl 也是從發行版軟體包安裝的。自定義 libcurl 要么安裝在沒有合適包的正常位置,因此被覆寫,要么安裝在庫搜索路徑中稍后的某個位置,但由于發行版是首選版本而被忽略。
您應該ldd $(which curl)在安裝 Git 之前和之后運行,并找出 libcurl 的自定義和發行版的位置。如果映像將 libcurl 安裝到 下的某個/usr/lib位置,則它已損壞:該位置是為包管理器保留的,它需要構建和安裝具有自定義版本的普通系統包以避免被覆寫。否則,您可以修改/etc/ld.so.conf以調整庫的搜索路徑,或使用LD_LIBRARY_PATH環境變數在每個程式的基礎上執行此操作。
uj5u.com熱心網友回復:
我的解決辦法是收集curl與libssh2 后安裝git。構建映像需要更長的時間,但比使用 Debian 輕。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/321150.html
