【问题标题】:[PM2][ERROR] File processes.json not found[PM2][错误] 找不到文件 processes.json
【发布时间】:2016-06-08 06:37:05
【问题描述】:

我正在使用 dockerfile 加载我的节点 js 应用程序,当我运行命令 docker run -p 4500:4500 myname/my-docker-image 时,由于某种原因,图像构建成功

我得到了回应:

pm2 launched in no-daemon mode (you can add DEBUG="*" env variable to get more messages)
2016-06-08 06:29:17: [PM2][WORKER] Started with refreshing interval: 30000
2016-06-08 06:29:17: [[[[ PM2/God daemon launched ]]]]
2016-06-08 06:29:17: BUS system [READY] on port /root/.pm2/pub.sock
2016-06-08 06:29:17: RPC interface [READY] on port /root/.pm2/rpc.sock
2016-06-08 06:29:17: [PM2][ERROR] File processes.json not found
2016-06-08 06:29:17: 
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │
└──────────┴────┴──────┴─────┴────────┴─────────┴────────┴────────┴──────────┘
2016-06-08 06:29:17:  Use `pm2 show <id|name>` to get more details about an app
2016-06-08 06:29:17: --no-daemon option enabled = do not exit pm2 CLI
2016-06-08 06:29:17: PM2 daemon PID = 1
2016-06-08 06:29:17: [PM2] Streaming realtime logs for [all] processes 

关键是我在构建 pm2 时明确定义的 processes.json 文件。

这是我的 processes.json 文件的内容:

    "apps": [
        {
            "name": "jira-accelo-integration",
            "script": "server.js",
            "merge_logs": true,
            "max_restarts": 20,
            "instances": 4,
            "DEBUG": "*",
            "max_memory_restart": "200M",
            "env": {
                "PORT": 4500,
                "NODE_ENV": "production"
            }
        }
    ]
}

【问题讨论】:

  • 你应该展示(但没有展示)的最重要的东西是:1)processes.js的路径2)你如何将它传递给pm2
  • process.js 的路径?我在关于 processes.js 的 pm2 文档中找不到任何地方
  • 抱歉,我的意思是 processes.json
  • 1) 我的 processes.json 文件位于我的项目根目录中,并且 2) CMD ["pm2", "start", "processes.json", "--no-daemon"] 位于我的 dockerfile 的末尾。
  • 而在dockerfile中你调用pm2 start processes.json,对吧?

标签: node.js dockerfile docker-machine pm2


【解决方案1】:

我遇到了这个错误,但在我的情况下,问题变得更加简单,创建我的 processes.json 文件时文件名中的一个拼写错误。以下是我解决问题所采取的步骤:

在交互模式下使用 shell 运行 docker 容器。它是否从正确的工作目录开始?所有文件都到位了吗,包括您的 processes.json 文件?如果您在交互式会话中执行 pm2 start processes.json 是否有效?

$ docker run -it jla/dockerizing-node-app bash
root@a9ee4c9c7816:/var/www/app/current# pm2 start processes.json --no-daemon

在 Dockerfile 中注释掉 CMD 并添加一个新的以验证命令是否可以看到您的 processes.json 文件。

$ edit Dockerfile
CMD ["ls" "-l" "processes.json"]
$ docker build -t jla/dockerizing-node-app .
$ docker run -p 4500:4500 jla/dockerizing-node-app

此时,当 ls 失败时,我注意到我的文件名为 process.json。也许 ls 命令也会因为其他原因而失败,比如没有使用正确的 WORKDIR。尝试其他命令,例如 ls -l 和 pwd,从命令的角度查看容器中发生了什么。只要坚持不懈并仔细观察,您应该能够让它发挥作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 2013-12-29
    • 2020-08-26
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多