我在尝试在我的 Mac 机器上创建一个 Rust 项目的 Docker 镜像,并希望能够在 x86_64 架构的 Linux 机器上运行它。我已经尝试了几天,但仍然无法成功构建镜像。下面是我的 Dockerfile:
WORKDIR /usr/src/hello-rust
# Install dependencies including gcc, and then create a symbolic link if necessary
RUN apk update && \
apk add --no-cache musl-dev openssl-dev pkgconf build-base openssl gcc && \
# If creating a symbolic link is necessary, uncomment the following line:
ln -s /usr/bin/gcc /usr/bin/x86_64-linux-gnu-gcc
ENV OPENSSL_LIB_DIR=/usr/lib \
OPENSSL_INCLUDE_DIR=/usr/include \
PKG_CONFIG_ALLOW_CROSS=1 \
OPENSSL_STATIC=true
COPY . .
RUN cargo build --release --target=x86_64-unknown-linux-gnu
FROM alpine:3.19
RUN apk add --no-cache libgcc openssl
WORKDIR /root/
COPY --from=builder /usr/src/hello-rust/target/release/hello-rust .
EXPOSE 9007
CMD ["./hello-rust"]
实话说,我就是一个 hello rust ,主要是 Dockerfile 追求最小 size 的镜像,所以用了 alpine ,查了很多资料,你们也可以看到我的 Dockerfile 也是 GPT4 改的,我也是才知道 Mac 到 Linux 有个 x86_64-unknown-linux-gnu ,但是一直没有配置好,请大神指点。
1
rrfeng 263 天前
怎么个无法成功法,至少给个报错信息吧……
|
2
DsuineGP 263 天前 1
- 如果运行时镜像非得用 alpine, 那么编译时镜像建议使用 x86_64-unknown-linux-musl 工具链, 例如 rust:1.77.1-alpine3.19. 依赖项中使用 rusttls 替换 openssl, 开启静态链接.
- 如果不是的话, 编译器镜像用 x86_64-linux-gnu-gcc 工具链, 例如 rust:1.77.1-buster, 运行时镜像用 debian:buster-slim, 使用 apt install openssl 需要注意的是, 使用 c/c++/rust 的程序, 编译时的环境和运行时的环境时强相关的 |