Jam*_*aix 16 linux bash docker
我正在尝试创建一个 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
Run Code Online (Sandbox Code Playgroud)
我需要做的最后一件事是配置 Rust,以便我可以使用cargo. 文档说要使用
source $HOME/.cargo/env
Run Code Online (Sandbox Code Playgroud)
但是当我RUN在 Dockerfile中的命令中尝试时,它说source无法识别。我发现的另一个选择是使用
RUN /bin/bash -c "source ~/.cargo/env"
Run Code Online (Sandbox Code Playgroud)
这不会出错,但是当我运行我的容器时,cargo它不是一个可识别的命令。
当我打开容器时,这两种方法都适用于 Bash,但我希望将其作为图像的一部分自动执行。
如何将其集成到我的 Dockerfile 中?
mic*_*ard 25
您必须在 .bashrc 中添加来源。
这有效:
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
RUN echo 'source $HOME/.cargo/env' >> $HOME/.bashrc
Run Code Online (Sandbox Code Playgroud)
编辑
代替
RUN echo 'source $HOME/.cargo/env' >> $HOME/.bashrc
您可以使用
ENV PATH="/root/.cargo/bin:${PATH}"
这是一个较少的 bash-only 解决方案
唯一source ~/.cargo/env能做的就是
export PATH="$HOME/.cargo/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)
所以我的建议是在你的 Dockerfile 中明确设置 PATH:
FROM ubuntu:16.04
# Update default packages
RUN apt-get -qq update
# Get Ubuntu packages
RUN apt-get install -y -q \
build-essential \
curl
# NOTE: no need to run update again at this point
# RUN apt-get update
# Get Rust; NOTE: using sh for better compatibility with other base images
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
# Add .cargo/bin to PATH
ENV PATH="/root/.cargo/bin:${PATH}"
# Check cargo is visible
RUN cargo --help
Run Code Online (Sandbox Code Playgroud)
这比 更透明source .cargo/env,如果您不熟悉 Rust,则更容易掌握。
另外,还要注意有生锈 的图像上DockerHub,你可以用它们(在FROM,而不是ubuntu:16.04运行或建造锈应用程序)。它比通过 apt 和 curl 安装所有东西更快更容易。
对于构建应用程序,您可能会发现多阶段 docker 构建很有用。它们非常灵活。
| 归档时间: |
|
| 查看次数: |
7727 次 |
| 最近记录: |