从RStudio终端访问Rust

时间:2018-05-18 19:24:06

标签: r docker rust rstudio

这是我在由Carl Boettiger和Dirk Eddelbuettel维护的Rocker项目中在RStudio中安装Rust而创建的Dockerfile:

FROM rocker/tidyverse
RUN apt-get update \
    && apt-get install -y wget
ENV RUSTUP_HOME=/usr/local/rustup \
    CARGO_HOME=/usr/local/cargo

RUN set -eux; \
    \
    url="https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init"; \
    wget "$url"; \
    chmod +x rustup-init; \
    ./rustup-init -y --no-modify-path --default-toolchain stable; \
    rm rustup-init; \
    chmod -R a+w $RUSTUP_HOME $CARGO_HOME;

ENV PATH /usr/local/cargo/bin:$PATH

图像构建正常,但是当我运行图像时 docker run -d -p 8787:8787 dockerimage我无法访问RStudio Server终端内的cargo Rust包管理器。

enter image description here

我错过了什么?

1 个答案:

答案 0 :(得分:2)

如果使用

登录正在运行的容器
$ docker exec -it <container-name>  bash
你会发现这样的事情:

root@58906b77cc2f:/# echo $PATH
/usr/local/cargo/bin:/usr/lib/rstudio-server/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@58906b77cc2f:/# which cargo
/usr/local/cargo/bin/cargo
root@58906b77cc2f:/# cargo
Rust's package manager

USAGE:
    cargo [OPTIONS] [SUBCOMMAND]
[...]

然而,RStudio Server以用户rstudio执行,情况有所不同:

root@58906b77cc2f:/# su - rstudio
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$ cargo
sh: 2: cargo: not found

因此,要么将Rust安装到属于默认PATH的位置,例如在评论中使用Dirk建议的apt。或者将PATHRUSTUP_HOMECARGO_HOME设置为适用于其他用户,例如将其添加到/etc/profile