【发布时间】:2017-02-01 08:03:32
【问题描述】:
我正在使用 Rust 开发 API,并管理环境,包括使用 Docker 的外部数据库。每次我对 API 代码进行更改时,cargo 都会重新构建,并且由于 Docker 不会缓存与 ADD 语句相关的任何内容以将 Rust 目录复制到容器中,它会重新下载所有包,即自从我使用 Nickel 以来,这是一个相当漫长的过程,它似乎有很多依赖项。
有没有办法在运行cargo build 之前引入这些依赖项?至少这样,如果依赖项发生变化,它只会安装所需的内容,类似于本地编译的 Cargo。
这是我目前使用的 Dockerfile:
FROM ubuntu:xenial
RUN apt-get update && apt-get install curl build-essential ca-certificates file xutils-dev nmap -y
RUN mkdir /rust
WORKDIR /rust
RUN curl https://sh.rustup.rs -s >> rustup.sh
RUN chmod 755 /rust/rustup.sh
RUN ./rustup.sh -y
ENV PATH=/root/.cargo/bin:$PATH SSL_VERSION=1.0.2h
RUN rustup default 1.11.0
RUN curl https://www.openssl.org/source/openssl-$SSL_VERSION.tar.gz -O && \
tar -xzf openssl-$SSL_VERSION.tar.gz && \
cd openssl-$SSL_VERSION && ./config && make depend && make install && \
cd .. && rm -rf openssl-$SSL_VERSION*
ENV OPENSSL_LIB_DIR=/usr/local/ssl/lib \
OPENSSL_INCLUDE_DIR=/usr/local/ssl/include \
OPENSSL_STATIC=1
RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN cargo build
EXPOSE 20000
CMD ./target/debug/api
这是我的 Cargo.toml
[profile.dev]
debug = true
[package]
name = "api"
version = "0.0.1"
authors = ["Vignesh Sankaran <developer@ferndrop.com>"]
[dependencies]
nickel = "= 0.8.1"
mongodb = "= 0.1.6"
bson = "= 0.3.0"
uuid = { version = "= 0.3.1", features = ["v4"] }
【问题讨论】:
-
也许你可以先添加并编译一个具有相同依赖项的虚拟应用程序。
-
github.com/rust-lang/cargo/issues/1891。另请注意,您可以一步安装正确的工具链
./rustup.sh -y --default-toolchain 1.11.0
标签: docker dependencies rust rust-cargo