【问题标题】:How to refresh your shell when using a Dockerfile?使用 Dockerfile 时如何刷新 shell?
【发布时间】:2019-02-13 09:25:23
【问题描述】:

我正在尝试构建一个可以使用 Azure 功能的 Dockerfile。由于库问题,尝试使用alpine:3.9 构建它失败后,我切换到ubuntu:18.04。现在我遇到了一个问题,我无法以可以安装node 的方式安装nvm(节点版本管理器)。我的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- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash 

RUN . /root/.nvm/nvm.sh && nvm install 10.14.1 && node

ENTRYPOINT ["/bin/bash"]

【问题讨论】:

  • “刷新外壳”在这里是一个非常奇怪的概念......如果您提供更多细节,例如构建日志(包括错误)和构建命令(或运行命令,如果问题发生在运行时)

标签: node.js docker dockerfile azure-functions nvm


【解决方案1】:

在 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.com/gpgkey/nodesource.gpg.key | apt-key add - \
 && echo "deb https://deb.nodesource.com/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.org/dist/v${node_version}/node-v${node_version}-linux-x64.tar.xz \
  | tar xJf - --strip 1

...最后几行将 Node tarball 直接解压到 /usr/local

【讨论】:

  • 这非常有用,因为有人为 apt 制作了安装实用程序,所以我已经可以使用它了。然而,这个问题被问到如何刷新外壳。这里有什么建议吗?
  • 这不是我熟悉的术语。你想达到什么结果?
猜你喜欢
  • 2013-07-05
  • 2012-06-22
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
相关资源
最近更新 更多