提问者:小点点

Docker安装nvm


我正在尝试像这样安装nvm:

FROM maven:3-jdk-8

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

RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

RUN source ~/.nvm/nvm.sh

RUN nvm install 16

RUN nvm use 16

然而,我一直得到这个错误:

 => [internal] load build definition from Dockerfile                                                                                                                  0.0s
 => => transferring dockerfile: 253B                                                                                                                                  0.0s
 => [internal] load .dockerignore                                                                                                                                     0.0s
 => => transferring context: 2B                                                                                                                                       0.0s
 => [internal] load metadata for docker.io/library/maven:3-jdk-8                                                                                                      1.1s
 => [1/6] FROM docker.io/library/maven:3-jdk-8@sha256:ff18d86faefa15d1445d0fa4874408cc96dec068eb3487a0fc6d07f359a24607                                                0.0s
 => CACHED [2/6] RUN rm /bin/sh && ln -s /bin/bash /bin/sh                                                                                                            0.0s
 => CACHED [3/6] RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash                                                                  0.0s
 => CACHED [4/6] RUN source ~/.nvm/nvm.sh                                                                                                                             0.0s
 => ERROR [5/6] RUN nvm install 16                                                                                                                                    0.1s
------
 > [5/6] RUN nvm install 16:
#7 0.128 /bin/sh: line 1: nvm: command not found
------
executor failed running [/bin/sh -c nvm install 16]: exit code: 127

我希望NVM是可访问的,因为我运行这一行:

RUN source ~/.nvm/nvm.sh

我在这里做错了什么?当我在我的docker容器中手动运行它时,它可以工作。


共2个答案

匿名用户

每个RUN语句都在自己的shell中执行,因此source命令不会影响后续的shell。

要修复它,请使用单个RUN命令:

FROM maven:3-jdk-8

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

RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

RUN source ~/.nvm/nvm.sh && nvm install 16 && nvm use 16

匿名用户

源命令不会对下一个RUN命令产生影响。您需要将所有nvm命令放在同一层中,如下所示:

RUN source~/. nvm/nvm.sh

或者,如果您想手动执行此操作,源命令应该添加env变量(您可以使用env命令查看它们)。