aliyun-node/tnvm

/bin/sh: tnvm: command not found

Closed this issue · 8 comments

我在Dockerfile文件中使用 tnvm命令,提示我tnvm 找不到。我尝试了一些方法,没能解决。
目前 Issues没看到相关问题,不知道这个该怎么解决?

配置如下:

RUN npm install -g n

RUN rm /bin/sh && ln -s /bin/bash /bin/sh

RUN wget --no-check-certificate -O- https://raw.githubusercontent.com/aliyun-node/tnvm/master/install.sh | bash && \
    export METHOD=script && \
    source "$HOME/.bashrc" && \
    tnvm install "node-v$(n --lts)" && \
    tnvm use "node-v$(n --lts)"

提示如下:

Cloning into '/root/.tnvm'...

=> Appending source string to /root/.bashrc
=> Try source /root/.bashrc to start using tnvm
/bin/sh: tnvm: command not found

这个解决了

. "$HOME/.tnvm/tnvm.sh"

但是又面临一个问题,我每次使用npm 或者 node 的时候,都需要执行 tnvm.sh 脚本。否则无法识别 tnvm,这个有好的解决方案吗?

操作系统是什么?

@JacksonTian

  • 宿主机win10
  • 容器系统 Ubuntu 16.04.1 LTS

应该是我描述漏掉了。
我现在需要写在同一层才能识别 tnvm,如下:

RUN . "$HOME/.tnvm/tnvm.sh" && \
    npm install -g cnpm && \
    cnpm install -g weex-toolkit@beta

分成两层写的话,不能识别 tnvm

RUN . "$HOME/.tnvm/tnvm.sh"

RUN npm install -g cnpm && \
    cnpm install -g weex-toolkit@beta

不知道这样描述是否清晰

你可以使用 ENV 把环境变量加到 docker 容器里,代替 tnvm.sh 里的 export,因为 tnvm 是通过 .bashrc 修改环境变量来把安装的 node 添加到路径的,但是在 docker 里 RUN 不会保留上一次的环境,所以需要手动改。

ENV PATH $TNVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

或者如果是 alinode

ENV PATH $TNVM_DIR/versions/alinode/v$ALINODE_VERSION/bin:$PATH

($TNVM_DIR如果使用tnvm前没有设置默认是$HOME/.tnvm)

这是 docker 的通病所以先关了这个 issue,有问题可以继续回复

很棒!是我对Docker不够了解导致的,(^__^) 。非常谢谢!