(Jin Qing's Column, Nov. 4, 2021)
My Rust program failed when running in docker:
root@a26b49c91efb:/myapp# ldd libmyapp_py.so ./libmyapp_py.so: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ./libmyapp_py.so)
The problem is because I build in "rust:1.56", and run in "debian:buster-slim" which is quite old. Run dpkg -l libc-bin shows the libc version is 2.28:
dpkg -l libc-bin
C:\Users\jinqing01>docker run debian:buster-slim dpkg -l libc-bin Unable to find image 'debian:buster-slim' locally buster-slim: Pulling from library/debian b380bbd43752: Already exists Digest: sha256:544c93597c784cf68dbe492ef35c00de7f4f6a990955c7144a40b20d86a3475f Status: Downloaded newer image for debian:buster-slim Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-==============-============-============-================================= ii libc-bin 2.28-10 amd64 GNU C Library: Binaries
Using the latest "debian:bookworm-slim" solved the problem.
Dockerfile:
FROM rust:1.56 as chef RUN cargo install cargo-chef WORKDIR /myapp FROM chef AS planner COPY . . RUN cargo chef prepare --recipe-path recipe.json FROM chef AS builder COPY --from=planner /myapp/recipe.json recipe.json # Build dependencies RUN cargo chef cook --release --recipe-path recipe.json # Build application COPY . . RUN cargo build --release FROM debian:bookworm-slim AS runtime WORKDIR /myapp RUN apt-get update && apt-get install -y python3 python3-pip && rm -rf /var/lib/apt/lists/* RUN pip3 install protobuf COPY --from=builder /myapp/target/release/*.so /myapp/ COPY --from=builder /myapp/target/release/myapp /myapp/ COPY --from=builder /myapp/tests /myapp/tests CMD ["myapp"]
Powered by: C++博客 Copyright © 金慶