You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在OpenJDK Docker镜像中安装Rust的Dockerfile编写问题

解决Docker中同时运行Rust测试与Java服务的问题

问题背景

我正在编写Dockerfile以运行Rust测试套件,该套件需要一个Jar包在独立端口运行。已将Jar包下载到项目中,希望基于openjdk:latest镜像同时安装Rust,先启动Jar包再用cargo运行测试。

当前Dockerfile内容:

# Start with java
FROM openjdk:latest

# Add rust
RUN <one line command to download rust>

# Install production dependencies and build a release artifact.
RUN cargo build --release

# Start chromedriver, geckodriver, and selenium standalone binary
RUN ./thirtyfour/tests/binaries_and_jars/chromedriver
RUN ./thirtyfour/tests/binaries_and_jars/geckodriver
RUN java -jar ./thirtyfour/tests/binaries_and_jars/selenium.jar standalone --port 1234

# Run the tests
RUN cargo test

使用官网curl命令安装Rust时,即使传递参数仍会弹出确认提示:

curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain stable --default-host x86_64-unknown-linux-gnu --profile default

需要以下任一解决方案:

  • 一键安装Rust的命令
  • 基于Rust镜像一键安装Java的命令

解决方案1:在openjdk镜像中无交互安装Rust

添加-y参数即可跳过安装确认提示,同时需配置cargo环境变量确保后续命令可直接调用:

# Add rust
RUN curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain stable --default-host x86_64-unknown-linux-gnu --profile default -y && \
    echo 'source $HOME/.cargo/env' >> $HOME/.bashrc

注意:原Dockerfile中用RUN单独启动服务会导致容器阻塞在服务启动步骤,后续cargo test无法执行,需将服务后台启动并等待就绪后再运行测试:

# 启动服务并运行测试
RUN ./thirtyfour/tests/binaries_and_jars/chromedriver & \
    ./thirtyfour/tests/binaries_and_jars/geckodriver & \
    java -jar ./thirtyfour/tests/binaries_and_jars/selenium.jar standalone --port 1234 & \
    sleep 10 && cargo test

sleep 10用于预留服务启动时间,可根据实际情况调整时长。

解决方案2:基于Rust镜像安装Java

若选择从rust:latest镜像构建,可通过以下命令一键安装OpenJDK:

FROM rust:latest

# 安装OpenJDK
RUN apt-get update && apt-get install -y openjdk-17-jdk && apt-get clean

后续服务启动与测试的逻辑同解决方案1一致。

内容的提问来源于stack exchange,提问作者Benjamin Peinhardt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:40:48