我有一个包含许多组件的系统,其中一个是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
启动此命令后,我可以看到:
在pm2的日志中,我可以看到许多这些错误:
docker:
守护程序的错误响应:驱动程序无法对端点jolly_meninsky上的外部连接进行编程(fefe45df2d338d89a4f8232873779e41bcaa1b846a463bc035d59c5ae09b26e0):绑定0.0.0.0:21083失败:端口已分配。
为什么单独运行时起作用的脚本start.sh
在Pm2上失败?
答案 0 :(得分:0)
您可能想尝试将pm2
与npm start
一起使用。在您的package.json
文件中,添加一个启动脚本
"start": "/home/myhome/mqtt_broker/startBroker.sh && sleep 5 && node Node"
然后,您可以使用以下方式启动应用程序
pm2 start npm --name BrokerMqtt -- start
您可以调整sleep
的时间,我补充说以确保容器已准备好为您的节点程序提供服务。
您可以进行的改进:
docker inspect container_name|grep Running