如何从docker run执行nvm

s2j5cfk0  于 2023-03-22  发布在  Docker
关注(0)|答案(1)|浏览(153)

我有一个空的docker镜像,全局安装了nvm和最新的lts nodejs。一切都按预期运行,除了一件事。我无法使用docker run执行nvm:

docker run -ti myimage:latest nvm

这会产生输出

--: line 0: exec: nvm: not found

这里是Dockerfile

FROM ubuntu:20.04
ARG DEBIAN_FRONTEND=noninteractive
ENV NVM_DIR='/usr/local/nvm'
RUN mkdir -pv "$NVM_DIR" && \
    apt-get -yq clean && apt-get -q update && \
    apt-get -yq --no-install-recommends install curl ca-certificates git-core && \
    curl -o- 'https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh' | bash && \
    . "$NVM_DIR/nvm.sh" && \
    nvm install --default --latest-npm 'lts/*' && \
    apt-get -yq clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ENTRYPOINT ["bash", "-c", ". /usr/local/nvm/nvm.sh && { [ \"x$*\" = 'x' ] || { exec ${@} ; exit $? ; } ; } && bash", "--"]
kgsdhlau

kgsdhlau1#

好了,我明白了这一点。nvm不执行的原因是因为它根本不可执行,而是预加载了bash函数,所以它必须直接执行,而不是通过exec执行。这就是工作原理:

FROM ubuntu:20.04
ARG DEBIAN_FRONTEND=noninteractive
ENV NVM_DIR='/usr/local/nvm'
RUN mkdir -pv "$NVM_DIR" && \
    apt-get -yq clean && apt-get -q update && \
    apt-get -yq --no-install-recommends install curl ca-certificates git-core && \
    curl -o- 'https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh' | bash && \
    . "$NVM_DIR/nvm.sh" && \
    nvm install --default --latest-npm 'lts/*' && \
    apt-get -yq clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ENTRYPOINT ["bash", "-c", ". /usr/local/nvm/nvm.sh && { [ \"x$*\" = 'x' ] || { ${@} ; exit $? ; } ; } && bash", "--"]

相关问题