我正在尝试在多个平台上为busybox编译cURL,但是一旦构建完毕,我需要将其复制到另一个Docker容器中。我以前曾为此工作过:
RUN wget -q https://curl.haxx.se/download/curl-7.63.0.tar.gz && \
tar xzf curl-7.63.0.tar.gz && \
cd curl-7.63.0 && \
LIBS="-ldl" ./configure --disable-shared && \
make && \
make install
但是,由于某种原因,也许是我犯了一个错误,它不再是静态编译的,而是需要像libcurl,libz等之类的库。以前,我只需要libssl / libcrypto等来使它工作。
所以我的问题确实是,有没有办法将cURL及其所有deps和共享库编译到特定目录,以便我可以复制它而不是尝试构建静态链接的二进制文件进行复制?
谢谢
答案 0 :(得分:0)
对于价值而言,可以通过--prefix=/build
参数来实现。
用于构建(非常简化的)cURL的完整Dockerfile是:
FROM buildpack-deps:stretch-scm
ARG VERSION=7.63.0
RUN apt-get update && \
apt-get install -y --no-install-recommends \
g++ gcc libc6-dev make pkg-config
RUN apt-get install -y libssl-dev
RUN wget -q https://curl.haxx.se/download/curl-${VERSION}.tar.gz && \
tar xzf curl-${VERSION}.tar.gz
WORKDIR curl-${VERSION}
RUN ./configure --prefix=/build \
--without-zlib \
--disable-cookies \
--disable-verbose \
--disable-versioned-symbols \
--disable-shared --enable-static \
--disable-ftps --disable-gopher \
--disable-imap --disable-imaps \
--disable-ldap --disable-ldaps \
--disable-pop3 --disable-pop3s \
--disable-rtmp --disable-rtsp \
--disable-dict --disable-file \
--disable-ftp --disable-sftp \
--disable-smb --disable-smbs \
--disable-smtp --disable-smtps \
--disable-telnet --disable-tftp && \
make && \
make install
然后您可以像这样提取它:
ARG CURL_IMAGE
FROM ${CURL_IMAGE} AS base
FROM busybox
ARG LIB_LOCATION
COPY --from=base /build/bin/curl /usr/sbin/curl
COPY --from=base ${LIB_LOCATION}/libssl.so.1.1 ${LIB_LOCATION}/libssl.so.1.1
COPY --from=base ${LIB_LOCATION}/libcrypto.so.1.1 ${LIB_LOCATION}/libcrypto.so.1.1
这很可能将来仅对我有用,但是您可以使用。
编辑:LIB_LOCATION是amd64,arm64和arm的以下之一。
/usr/lib/x86_64-linux-gnu
/usr/lib/arm-linux-gnueabihf
/usr/lib/aarch64-linux-gnu