Установите конкретную версию nodejs с помощью apt-get

Я новичок в Linux вообще, и вот чего я пытаюсь достичь:

Я пытаюсь установить версию nodejs в Debian Linux с помощью следующей команды:

apt-get install nodejs=8.14.0

Но я получаю эту ошибку в ответ:

E: Version '8.14.0' for 'nodejs' was not found

Насколько я понял, это правильный способ указать версию. Если я сделаю это, то он отлично работает:

apt-get install nodejs

Но мне нужна именно эта версия, а не последняя. Я делаю это для образа Docker, поэтому его нужно установить во время выполнения.


person nullpointer    schedule 05.02.2020    source источник


Ответы (3)


Убедитесь, что у вас есть следующие пакеты: -

sudo apt-get install \
    apt-transport-https \
    curl \
    software-properties-common

Включите репозиторий NodeSource с помощью команды: -

sudo curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

После включения репозитория установите Node.js с помощью команды: -

sudo apt-get install nodejs
person Munish    schedule 05.02.2020
comment
Для этого мне нужно установить curl, попробую. - person nullpointer; 06.02.2020

Если вы делаете это для образа Docker, почему бы просто не использовать образ Node Docker с нужной вам версией?

person alc6379    schedule 05.02.2020
comment
Потому что мне нужно создать собственное изображение с определенными версиями java и gradle. - person nullpointer; 06.02.2020
comment
Честно говоря, похоже, что вы неправильно собираете образ Docker. Чего вы пытаетесь достичь? Потому что, если нужно что-то построить, возможно, мы сможем помочь вам оценить ваш подход, а не устанавливать все это в один контейнер. - person alc6379; 07.02.2020
comment
Я хочу создать один образ, который я могу воссоздавать каждый раз в сборке, которая будет использовать определенные версии Java, Gradle, Node и т. д. в этом образе. Либо этот образ будет перестраиваться каждый раз, либо я могу сохранить его в частном репозитории и использовать повторно. Пожалуйста, дайте мне знать, если это кажется неправильным, я новичок в Docker. - person nullpointer; 07.02.2020
comment
Итак, я думаю, вопрос в том, что вы пытаетесь сделать со всем этим? Построить какую-то контейнерную CI-систему? Создать проект узла? Создать и разместить проект Node? Не зная, что вы пытаетесь сделать, трудно советовать, но в целом установка кучи вещей, которые вы описываете, звучит как анти-шаблон. - person alc6379; 10.02.2020
comment
Я пытаюсь контейнеризировать сборку этого приложения. Разве смысл не в том, чтобы все (например, nodejs, gradle, java) было предварительно установлено на образе и просто повторно использовалось, не беспокоясь об установке? По крайней мере, это то, что я узнал о контейнеризации. Я просто буду использовать его для сборки, а не для размещения проекта узла, поскольку это приложение SpringBoot. - person nullpointer; 14.02.2020
comment
Похоже, вы действительно хотите сделать многоэтапную сборку или initContainers. Если контейнер должен быть создан во время выполнения, вы можете запустить материал gradle как initContainer для другого контейнера, в котором размещен проект node. Эти двое могут совместно использовать том, и gradle initContainer может вывести проект на этот том. Или вы можете выполнить многоэтапную сборку, при которой в одном файле docker вы используете образ для сборки проекта, а затем на другом этапе образа используются выходные данные исходной сборки для создания контейнера с просто артефакты сборки. - person alc6379; 14.02.2020
comment
Кроме того, общий смысл контейнеров состоит в том, чтобы в конечном итоге иметь только то, что вам нужно для запуска проекта. Это похоже на то, как если бы вы запускали проект C#, вы бы не хотели устанавливать Visual Studio в контейнере, верно? Та же основная идея с наличием Gradle и Java. Вам может понадобиться Node в образе для его сборки, но вы будете использовать отдельный образ/контейнер, в котором ТОЛЬКО есть Node и ничего больше, чтобы запустить его. - person alc6379; 14.02.2020
comment
Различные контейнеры звучат как хорошая идея. Спасибо @alc6379. Можете ли вы указать мне какую-нибудь ссылку, в которой есть пример, подобный этому, один контейнер создает изображение, а другой контейнер может его забрать? Я новичок в Докере. - person nullpointer; 14.02.2020
comment
Я бы начал здесь, а затем опубликую больше на SO, если у вас есть вопросы! docs.docker.com/develop/develop-images/multistage-build - person alc6379; 17.02.2020

Вы можете попробовать установить свой узел с помощью менеджера пакетов, такого как nvm:

Установка Node.js в Linux

Или загрузите двоичные файлы прямо отсюда: Node.js v8.14.0

person Charles. Hi    schedule 05.02.2020
comment
Я не могу скачать двоичные файлы, так как это контейнер докеров. Я хочу, чтобы это было просто, поэтому, вероятно, буду использовать curl. - person nullpointer; 06.02.2020
comment
Посмотрите этот ответ, он может вам помочь: stackoverflow.com/a/16902348/5774506 - person Charles. Hi; 06.02.2020