如何在docker里面同时启动多个pm2进程

起因:最近在docker里面安装了一个whistle服务,但是吧 总挂。想着用pm2同时启动多个。

mac上直接输入

pm2 start "whistle run --port 8899" --name "1" & pm2 start "whistle run --port 9988" --name "2"

这样就可以了 但是在docker 中就不好使。哭

数据发送中...
2022-02-23T11:01:55: PM2 log: Launching in no daemon mode
2022-02-23T11:01:55: PM2 log: Launching in no daemon mode
2022-02-23T11:01:55: PM2 log: Launching in no daemon mode
2022-02-23T11:01:55: PM2 log: Launching in no daemon mode
2022-02-23T11:01:55: PM2 log: Launching in no daemon mode
2022-02-23T11:01:55: PM2 log: App [7799:0] starting in -fork mode-
2022-02-23T11:01:55: PM2 log: App [7799:0] online
[i] whistle@2.9.1 started
[i] 1. use your device to visit the following URL list, gets the IP of the URL you can access:
       http://127.0.0.1:7799/
       http://10.198.192.206:7799/
       Note: If all the above URLs are unable to access, check the firewall settings
             For help see https://github.com/avwo/whistle
[i] 2. set the HTTP proxy on your device with the above IP & PORT(7799)
[i] 3. use Chrome to visit http://local.whistlejs.com/ to get started
Press [Ctrl+C] to stop whistle...

实际上呢 在docker里面或者电脑上启动多个pm2需要配置相应额环境变量

例如:

Multiple PM2 on the same server

The client and daemon communicates via socket files available in $HOME/.pm2/[pub.sock|rpc.sock]

You can start multiple PM2 instances by changing the PM2_HOME environmnent variable.

$ PM2_HOME='.pm2' pm2 start echo.js --name="echo-node-1"
$ PM2_HOME='.pm3' pm2 start echo.js --name="echo-node-2"
This will start two different PM2 instances. To list processes managed by each different instances do:

$ PM2_HOME='.pm2' pm2 list
$ PM2_HOME='.pm3' pm2 list

docker里面一样 用pm2-runtime就可以了

方法二:pm2 启动的时候使用--no-daemon

如果在docker中需要记录pm2的日志到文件中,推荐使用下面的方法来启动服务

例如:

#!/bin/bash
pm2 start ./build/server.js --name app; pm2 start ./build/bin/crontab.js --name crontab --no-daemon


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker 是一种轻量级的容器化技术,可以将应用程序及其依赖项打包在一个可移植的容器中,这种技术在现代软件开发和运行环境中越来越流行。当需要在同一个容器中同时运行多个服务或应用程序时,我们可以使用 Docker 的 CMD 或 ENTRYPOINT 命令来实现。 CMD 命令用于指定容器启动时默认运行的命令,并且可以被覆盖。在 CMD 命令中,我们可以指定多条命令,以分号隔开。例如: ``` CMD ["command1", "command2"] ``` 当容器启动时,会自动执行 command1 和 command2。 ENTRYPOINT 命令也类似于 CMD 命令,用于指定容器启动时要执行的命令。不同的是,ENTRYPOINT 命令可以在容器启动时不能被覆盖。如果用户在使用 docker run 命令启动容器时,指定了其他命令,这些命令会被传递给 ENTRYPOINT 命令。例如: ``` ENTRYPOINT ["command1"] CMD ["command2"] ``` 当容器启动时,会自动执行 command1,并且将命令参数传递给它。如果用户使用 docker run 命令传递了其他命令参数,那么这些参数会被传递给 CMD 命令执行。 使用这些命令可以很好地控制 Docker 容器中同时运行的多个服务或应用程序。例如,我们可以指定同时运行一个 Web 服务器和一个数据库服务器的 Docker 容器,并使用 CMD 或 ENTRYPOINT 命令来启动这两个服务。要注意的是,这些服务需要在同一个容器中运行,会占用更多的计算资源和内存,因此需要根据实际情况进行优化和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值