使用Dockerfile时如何刷新shell?
我正在尝试构建一个可以使用Azure功能的Dockerfile。由于库问题,在尝试使用alpine:3.9
构建它失败后,我换成了ubuntu:18.04
。现在我有一个问题,我无法安装nvm
(节点版本管理器),以便我可以安装node
。我的Dockerfile
在下面。我设法安装nvm
但现在,在尝试使用nvm
时,我无法安装我想要的节点版本。问题可能与刷新shell有关,但这很棘手,因为看起来Docker继续使用它输入的原始shell来运行下一个构建阶段。有关如何刷新shell的任何建议,以便nvm
可以有效地工作?
FROM ubuntu:18.04
RUN apt update && apt upgrade -y && apt install -qq -y --no-install-recommends \
python-pip \
python-setuptools \
wget \
build-essential \
libssl-dev
RUN pip install azure-cli
RUN wget -qO- .33.0/install.sh | bash
RUN . /root/.nvm/nvm.sh && nvm install 10.14.1 && node
ENTRYPOINT ["/bin/bash"]
回答如下:
您通常不需要像Docker镜像中的nvm
这样的版本管理器。由于Docker映像只打包一个应用程序,并且由于它有自己的独立文件系统,因此您只需安装所需的单个版本的Node即可。
我要尝试的第一件事就是安装标准Ubuntu软件包具有的任何版本的Node(在Ubuntu 18.04,looks like 8.11中)。虽然Node版本之间存在一些变化,但大多数情况下语言和核心库都非常稳定。
RUN apt update && apt-install nodejs
或者,如果你需要更新的东西,有official Debian packages:
RUN curl -sSL https://deb.nodesource/gpgkey/nodesource.gpg.key | apt-key add - \
&& echo "deb https://deb.nodesource/node_10.x cosmic main" > /etc/apt/sources.list.d/nodesource.list \
&& apt update \
&& apt install nodejs
这将为您提供该主要版本的Node的当前版本(截至本文撰写时,10.15.1)。
如果你真的需要特定版本的Node,那就有official binary packages。我可能会写:
FROM ubuntu:18.04
ARG node_version=10.14.1
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get install --no-install-recommends --assume-yes \
ca-certificates \
curl \
xz-utils
RUN cd /usr/local \
&& curl -o- https://nodejs/dist/v${node_version}/node-v${node_version}-linux-x64.tar.xz \
| tar xJf - --strip 1
...最后几行将Node tar包直接解压缩到/usr/local
。