如何修复“找不到-lpq”使用Alpine Linux Docker图像时错误吗?
当我使用Alpine作为基本图像使用此命令在Docker中构建Rust应用程序时:
docker build -f ./Dockerfile -t="reddwarf-pro/reddwarf-admin:v.1.0.0" .
它显示了这样的错误:
#14 222.9 = note: /usr/lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../aarch64-alpine-linux-musl/bin/ld: cannot find -lpq
#14 222.9 collect2: error: ld returned 1 exit status
#14 222.9
#14 222.9
#14 223.0 warning: `reddwarf-admin` (bin "reddwarf-admin") generated 1 warning
#14 223.0 error: could not compile `reddwarf-admin` due to previous error; 1 warning emitted
------
executor failed running [/bin/sh -c cargo build --release]: exit code: 101
这是Dockerfile:
# to reduce the docker image size
# build stage
FROM rust:1.54-alpine as builder
WORKDIR /app
COPY . /app
RUN rustup default stable
RUN apk update && apk add --no-cache libpq musl-dev pkgconfig openssl-dev gcc
RUN cargo build --release
# RUN cargo build
# Prod stage
FROM alpine:3.15
WORKDIR /app
ENV ROCKET_ADDRESS=0.0.0.0
# ENV ROCKET_PORT=11014
RUN apk update && apk add --no-cache libpq curl
COPY --from=builder /app/.env /app
COPY --from=builder /app/settings.toml /app
COPY --from=builder /app/target/release/reddwarf-admin /app/
COPY --from=builder /app/Rocket.toml /app
CMD ["./reddwarf-admin"]
我已经在Alpine Image中添加了libpq
。为什么仍然显示此错误?我还尝试添加libpq-dev
,但似乎高山没有包含此库。
我该怎么办来解决这个问题?
When I build my Rust application in Docker using alpine as the base image using this command:
docker build -f ./Dockerfile -t="reddwarf-pro/reddwarf-admin:v.1.0.0" .
It shows an error like this:
#14 222.9 = note: /usr/lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../aarch64-alpine-linux-musl/bin/ld: cannot find -lpq
#14 222.9 collect2: error: ld returned 1 exit status
#14 222.9
#14 222.9
#14 223.0 warning: `reddwarf-admin` (bin "reddwarf-admin") generated 1 warning
#14 223.0 error: could not compile `reddwarf-admin` due to previous error; 1 warning emitted
------
executor failed running [/bin/sh -c cargo build --release]: exit code: 101
This is the Dockerfile:
# to reduce the docker image size
# build stage
FROM rust:1.54-alpine as builder
WORKDIR /app
COPY . /app
RUN rustup default stable
RUN apk update && apk add --no-cache libpq musl-dev pkgconfig openssl-dev gcc
RUN cargo build --release
# RUN cargo build
# Prod stage
FROM alpine:3.15
WORKDIR /app
ENV ROCKET_ADDRESS=0.0.0.0
# ENV ROCKET_PORT=11014
RUN apk update && apk add --no-cache libpq curl
COPY --from=builder /app/.env /app
COPY --from=builder /app/settings.toml /app
COPY --from=builder /app/target/release/reddwarf-admin /app/
COPY --from=builder /app/Rocket.toml /app
CMD ["./reddwarf-admin"]
I have already added libpq
in the alpine image. Why does it still show this error? I am also tried to add libpq-dev
but it seems the alpine did not contains this library.
What should I do to fix this problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
也许有些令人困惑的是,Dev版本称为
PostgreSQL-DEV
,而不是libpq-dev
在v3.14中。 (据我所知,它在v3.15中重命名为libpq-dev
)。libpq
确实确实安装了共享库,但是postgresql -dev
创建符号链接/usr/lib/lib/libpq.so-so-> libpq.so.5.13
使链接成功。来自
MAN LD
:也就是说,
-lname
语法只会搜索libname。(a | so)
而不是版本的名称。Perhaps slightly confusingly, the dev version is called
postgresql-dev
and notlibpq-dev
in v3.14. (From what I can tell, it was renamedlibpq-dev
in v3.15).libpq
does indeed install the shared library, butpostgresql-dev
creates the symbolic link/usr/lib/libpq.so -> libpq.so.5.13
which makes linking succeed.From
man ld
:That is, the
-lname
syntax will only search forlibname.(a|so)
, not versioned names.您需要的依赖性是:
libpq-dev
The dependency you need is:
libpq-dev