如何通过pm2运行docker容器?

时间:2019-08-09 07:12:27

标签: docker ubuntu-18.04 pm2

我有一个包含许多组件的系统,其中一个是docker容器。 我想用Pm2管理所有这些组件。

我可以在Pm2上运行Node.js脚本,但是在Ubuntu 18.04.2 LTS上启动docker容器时遇到问题。

我有一个脚本“ start.sh”,它已经以正确的方式启动了Docker容器。

脚本为:

docker run -d -it -p 21083:21083 -p 9001:9001 -v /home/myhome/mqtt_broker/conf/mosquitto.conf:/mosquitto/config/mosquitto.conf -v /home/myhome/mqtt_broker/authentication/auth.txt:/mosquitto/auth.txt -v /home/myhome/mqtt_broker/acl/aclfile.txt:/mosquitto/aclfile.txt eclipse-mosquitto

我正在尝试以这种方式在PM2中启动该脚本:

pm2 start /home/myhome/mqtt_broker/startBroker.sh --name=BrokerMqtt

启动此命令后,我可以看到:

  • 'docker ps'说容器已经打开,
  • pm2进程列表中状态为“错误”的BrokerMqtt,
  • 在pm2的日志中,我可以看到许多这些错误:

    docker:

      

    守护程序的错误响应:驱动程序无法对端点jolly_meninsky上的外部连接进行编程(fefe45df2d338d89a4f8232873779e41bcaa1b846a463bc035d59c5ae09b26e0):绑定0.0.0.0:21083失败:端口已分配。

为什么单独运行时起作用的脚本start.sh在Pm2上失败?

1 个答案:

答案 0 :(得分:0)

您可能想尝试将pm2npm start一起使用。在您的package.json文件中,添加一个启动脚本

  "start": "/home/myhome/mqtt_broker/startBroker.sh && sleep 5 && node Node"

然后,您可以使用以下方式启动应用程序

pm2 start npm --name BrokerMqtt -- start

您可以调整sleep的时间,我补充说以确保容器已准备好为您的节点程序提供服务。

您可以进行的改进:

  1. 给容器起个名字
  2. 在运行bash脚本之前,请确保容器未运行,这是一种检查方法:
docker inspect container_name|grep Running
相关问题