Привет, я использую amazonlinux:2 в качестве образа докера и пытаюсь установить nodev14 из nvm. Я не нашел альтернатив, которые я пытаюсь установить yarn. Вот мой Dockerfile
FROM amazonlinux:2
RUN yum update -y && \
yum install tar curl gzip -y && \
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash && \
. ~/.nvm/nvm.sh && \
nvm install 14 -y && \
npm install yarn -g && \
yum install aws-cli -y && \
yum clean all
Когда я собираю, сборка успешна, но когда я запускаю docker run -it container /bin/bash и после того, как вхожу /bin/bash, он говорит, что команда не найдена.
Вот полный журнал этого процесса
niteshrijal@Niteshs-MBP creepler % docker build -t node-14-tst .
[+] Building 50.9s (7/7) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 377B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/amazonlinux:2 2.5s
=> [auth] library/amazonlinux:pull token for registry-1.docker.io 0.0s
=> CACHED [1/2] FROM docker.io/library/amazonlinux:2@sha256:7c24b50b9f0ad83b7219edb704962f361bcf3ec85fdfd302121159bf0d0a6 0.0s
=> [2/2] RUN yum update -y && yum install tar curl gzip -y && curl -o- https://raw.githubusercontent.com/nvm-sh/ 47.5s
=> exporting to image 0.8s
=> => exporting layers 0.8s
=> => writing image sha256:bd8ae162aadb85eb1e08ac987f4cf136a7e604d7eac16231205d20ccab134e9a 0.0s
=> => naming to docker.io/library/node-14-tst 0.0s
What's Next?
View summary of image vulnerabilities and recommendations → docker scout quickview
niteshrijal@Niteshs-MBP creepler % docker run -it node-14-tst /bin/bash
bash-4.2# yarn
bash: yarn: command not found





Ваша среда NVM не активируется. Когда вы устанавливаете NVM, он пытается добавить некоторые данные в вашу среду/PATH в правильном профиле. Если ему не удастся найти правильный файл профиля, он не сможет этого сделать. Он также не может знать, будете ли вы подключаться к своему контейнеру через bash, sh, zsh или, возможно, какую-либо другую оболочку, и поэтому он действительно не может знать, в какой файл добавлять ваши переменные. Вот почему в файле readme NVM указано, что он пытается добавить переменные в правильный профиль.
Попробуйте создать файл .bashrc в домашнем каталоге вашего контейнера со следующим содержимым, как указано в файле сведений NVM:
export NVM_DIR = "$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
Вы можете сделать это, создав файл .bashrc в той же папке, что и ваш Dockerfile, а затем просто скопировав его:
COPY .bashrc /root/.bashrc
это отвечает на мой вопрос, но пряжа не установлена в /bin/sh, у меня там проблема
Я бы, вероятно, просто предложил не использовать NVM внутри Docker, поскольку это в основном инструмент разработки. Вместо этого используйте базовый образ Node, как предложил @DavidMaze. Это будет гораздо более гладкий опыт.
Если вам абсолютно необходим Amazon Linux, вы можете загрузить и запустить сценарий по адресу rpm.nodesource.com/setup_14.x (например, через CURL), а затем запустить yum install nodejs -y, который установит Node 14 в ваш образ Amazon Linux. напрямую, не требуя загрузки каких-либо переменных профиля.
Есть ли Как установить nvm в докер?ответить на ваш вопрос? Также учтите, что образ Docker обычно содержит одно упакованное приложение и его зависимости, а это значит, что ему никогда не понадобится более одной версии Node; можете ли вы напрямую установить нужную вам версию Node без nvm или просто собрать свой образ
FROM node:14?