【问题标题】:How to run a docker container with pm2?如何使用 pm2 运行 docker 容器?
【发布时间】:2019-08-10 10:24:40
【问题描述】:

我有一个包含许多组件的系统,其中一个是 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 的日志中,我可以看到许多这样的错误:

    码头工人:

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

为什么脚本start.sh(如果单独启动就可以)在 Pm2 中失败?

【问题讨论】:

  • 你能发布 dockerfile 吗?从官方 docker 镜像看来,该进程已经作为入口点启动了,所以当您尝试使用 pm2 重新启动时,端口已经被占用。

标签: docker ubuntu-18.04 pm2


【解决方案1】:

您可能想尝试将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

【讨论】:

    猜你喜欢
    • 2020-09-30
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多