这是我在由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包管理器。
我错过了什么?
答案 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
。或者将PATH
,RUSTUP_HOME
和CARGO_HOME
设置为适用于其他用户,例如将其添加到/etc/profile
。