我有一个Rust程序,需要进行一些DNS查找。它适用于以下Dockerfile
:
FROM rust:1.63.0-bullseye AS build
WORKDIR /app
COPY . .
RUN cargo build --release
EXPOSE 8080
ENTRYPOINT ["/app/target/release/router"]
我试着为这个程序创建一个有点极简主义的图像,比如:
FROM rust:1.63.0-bullseye AS build
WORKDIR /app
COPY . .
RUN cargo build --release
RUN mkdir -p /app/lib
RUN cp -LR $(ldd ./target/release/router | grep "=>" | cut -d ' ' -f 3) /app/lib
FROM scratch AS websocket-router-rust
WORKDIR /app
COPY --from=build /app/lib /app/lib
COPY --from=build /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2
COPY --from=build /app/target/release/router /app/router
ENV LD_LIBRARY_PATH=/app/lib
EXPOSE 8080
ENTRYPOINT ["/app/router"]
然而,当使用后一个Dockerfile时,DNS查找似乎会失败。你知道应该从构建阶段复制哪些文件吗?
更新:通过在Docker镜像中运行文件访问跟踪程序,同时向服务器发出请求,然后复制所有使用COPY读取的文件,使其正常工作。。。Dockerfile有点乱,但现在还不到30MB。主要问题是ldd不返回libnss so,所以这些so在图像中丢失了。
您可以在/etc/docker/daemon.json
文件中设置DNS地址:
{
"dns": ["10.0.0.2", "8.8.8.8"]
}