Kos*_*osh 2 command-line docker
我正在尝试使用 Anaconda 和其他一些东西创建一个 Docker 容器。安装 Anaconda 后我需要激活它。当我跑步时
CONDA_PATH=$HOME/anaconda3
eval "$($CONDA_PATH/bin/conda shell.bash hook)"
Run Code Online (Sandbox Code Playgroud)
从我的容器中它可以工作。但是当我将它包含到我的 Dockerfile 中时
ENV CONDA_PATH $HOME/anaconda3
RUN eval "$($CONDA_PATH/bin/conda shell.bash hook)"
Run Code Online (Sandbox Code Playgroud)
它不是。
我知道 eval 将参数作为 shell 命令执行,但我对包装“$ ()”感到困惑 谁能解释一下它实际上做了什么?
我的 Dockerfile:
FROM ubuntu
MAINTAINER Kosh koshmariel@gmail.com
RUN apt-get update
RUN apt-get install htop
RUN apt-get install nano
WORKDIR /home
COPY Anaconda3-2020.02-Linux-x86_64.sh /home
ENV CONDA_PATH $HOME/anaconda3
RUN bash Anaconda3-2020.02-Linux-x86_64.sh -b -p $CONDA_PATH #silent Anaconda installation without activation
#RUN eval "$($CONDA_PATH/bin/conda shell.bash hook)"
RUN $CONDA_PATH/bin/conda shell.bash hook
#RUN conda init
#RUN conda install -c conda-forge -y tensorflow
CMD /bin/bash
Run Code Online (Sandbox Code Playgroud)
eval "$(shell-command)"将运行shell-command并将其输出作为要执行的命令提供给 shell。
在这种情况下,挂钩是一种将自定义操作附加到软件处理的某些事件的机制。
so$CONDA_PATH/bin/conda shell.bash hook可能会生成一个bash命令行,执行时会将 Anaconda 连接到正在运行的bash进程,并eval "$($CONDA_PATH/bin/conda shell.bash hook)"负责执行该命令。尝试$CONDA_PATH/bin/conda shell.bash hook直接从 shell 提示符运行以查看其生成的内容,以便更好地了解发生了什么。这可能会很好地帮助您理解为什么它在 Docker 上下文中不起作用。