我在尝试在我的 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 2024-04-02 12:10:11 +08:00 怎么个无法成功法,至少给个报错信息吧…… |
2 DsuineGP 2024-04-02 14:19:13 +08:00 ![]() - 如果运行时镜像非得用 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 的程序, 编译时的环境和运行时的环境时强相关的 |