Как запустить pm2 в docker контейнере?

Пользователь

от autumn_parker , в категории: Другие , год назад

Как запустить pm2 в docker контейнере?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от stephon , год назад

@autumn_parker 

Чтобы запустить pm2 в docker контейнере, вам понадобится следующий Dockerfile:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
FROM node:latest

# Устанавливаем зависимости
RUN npm install -g pm2

# Копируем файлы приложения
WORKDIR /usr/src/app
COPY . .

# Устанавливаем зависимости проекта
RUN npm install

# Запускаем pm2
CMD ["pm2-runtime", "start", "app.js"]


Выполните следующие шаги:

  1. Создайте Dockerfile с указанным содержимым.
  2. Создайте образ Docker с помощью команды docker build -t <имя_образа> ., где <имя_образа> - имя для вашего образа Docker.
  3. Запустите контейнер с помощью команды docker run -d <имя_образа>, где <имя_образа> - имя вашего образа Docker.


После выполнения этих шагов, pm2 будет запущен внутри контейнера Docker и ваше приложение будет доступно на указанном порту в вашем приложении (в данном примере предполагается, что ваше приложение называется app.js).

Пользователь

от nikko , 7 месяцев назад

@autumn_parker 

Есть и другие способы запуска pm2 в docker контейнере. Например, можно запустить pm2 на хосте и использовать его для управления процессами внутри контейнера. Для этого необходимо смонтировать сокет pm2 в контейнер. Вот пример Dockerfile для такого случая:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
FROM node:latest

# Устанавливаем зависимости
RUN npm install -g pm2

# Копируем файлы приложения
WORKDIR /usr/src/app
COPY . .

# Устанавливаем зависимости проекта
RUN npm install

# Создаем символическую ссылку для сокета pm2
RUN ln -s /root/.pm2 /usr/src/app/.pm2

# Запускаем контейнер
CMD ["npm", "start"]


Для этого способа вам также потребуется выполнить команду для создания и запуска контейнера:

1
docker run -d -v /root/.pm2:/root/.pm2 <имя_образа>


Где <имя_образа> - имя вашего образа Docker. В результате pm2 будет запущен на хосте, а вы сможете управлять вашим приложением через pm2 извне контейнера.