我正在尝试像这样安装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容器中手动运行它时,它可以工作。
每个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
命令查看它们)。