我有一个空的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", "--"]
1条答案
按热度按时间kgsdhlau1#
好了,我明白了这一点。nvm不执行的原因是因为它根本不可执行,而是预加载了bash函数,所以它必须直接执行,而不是通过exec执行。这就是工作原理: