【发布时间】:2018-09-15 12:28:27
【问题描述】:
我正在尝试创建一个 docker 映像,该映像将为构建 Rust 项目设置一个 Linux 环境。到目前为止,这是我的Dockerfile:
FROM ubuntu:16.04
# Update default packages
RUN apt-get update
# Get Ubuntu packages
RUN apt-get install -y \
build-essential \
curl
# Update new packages
RUN apt-get update
# Get Rust
RUN curl https://sh.rustup.rs -sSf | bash -s -- -y
我需要做的最后一件事是配置 Rust,这样我就可以使用cargo。文档说要使用
source $HOME/.cargo/env
但是当我在 Dockerfile 的 RUN 命令中尝试这样做时,它说 source 无法识别。我发现的另一个选择是使用
RUN /bin/bash -c "source ~/.cargo/env"
这不会出错,但是当我运行我的容器时,cargo 不是一个可识别的命令。
当我打开容器时,这两种方法都适用于 Bash,但我希望这可以作为图像的一部分自动化。
如何将它集成到我的 Dockerfile 中?
【问题讨论】:
-
bash -c 'source anything'onlysources 一个文件进入单个bash实例,该实例在命令完成时退出。使用它的正确方法是bash -c 'source ~/.cargo/env && cargo whatever',在实际需要使用您添加的内容的同一 shell 中运行source。 -
(另外,考虑
.而不是source-- 后者的名称是一种bashism,而前者是POSIX 规定的)。