Я использую Docker для создания приложения Diesel Rust. Для простоты развертывания я использую приведенный ниже DockerFile для создания образа, но когда я пытаюсь запустить его, он выдает ошибку
/app/rest-jwt-rust: error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory
Я попробовал установить libqp5 и libpqdev вместе с моей установкой, но проблема осталась та же.
#build from latst rust version
FROM rust:latest as build
# install libpq, libsqlite and create new empty binary project
RUN apt-get update; \
apt-get install -y --no-install-recommends postgresql-common libpq-dev libpq5 libpq-dev libsqlite3-dev; \
USER=root cargo new --bin app
WORKDIR /app
# copy manifests
COPY ./Cargo.toml ./Cargo.toml
# build this project to cache dependencies
RUN cargo build; \
rm src/*.rs
# copy project source and necessary files
COPY ./src ./src
COPY ./migrations ./migrations
COPY ./diesel.toml .
COPY ./.env .
# rebuild app with project source
RUN rm ./target/debug/deps/rest_jwt_rust*; \
cargo build --release
# deploy stage
FROM debian:buster-slim
# create app directory
RUN mkdir app
WORKDIR /app
# install libpq and libsqlite
RUN apt-get update; \
apt-get install -y --no-install-recommends postgresql-common libpq-dev libpq5 libpq-dev libsqlite3-dev; \
rm -rf /var/lib/apt/lists/*
# copy binary and configuration files
COPY --from=build /app/target/release/rest-jwt-rust .
COPY --from=build /app/.env .
COPY --from=build /app/diesel.toml .
COPY ./wait-for-it.sh .
# expose port
EXPOSE 8080
# run the binary
CMD ["/app/rest-jwt-rust"]
Всегда используйте &&
вместо ;
, если вас волнует, успешны ли команды.
Также зависит ли ваше приложение конкретно от Debian Buster? Это два выпуска назад; вам следует использовать Bookworm.
использование libpq-dev во время сборки и libpq5 для развертывания и обновления до bookworm заставило все работать.
Я думаю, вам нужен
libpq5
в окончательном изображении, как в случае ошибки при загрузке общих библиотек: libpq.so.5: невозможно открыть файл общего объекта: при запуске приложения ржавчины нет такого файла или каталога, но похоже, что это там. (Действительно ли шагapt-get install
успешен? Попробуйте изменить;
на&&
в этой команде, чтобы избежать ошибок.)