首页 > 解决方案 > docker 上的 pm2 卡在 getMonitorData

问题描述

我正在尝试部署由多个微服务组成的应用程序,每个微服务都位于不同的 docker 容器中。其中一个(如下所示的主服务)挂在 pm2:client 调用守护程序方法Calling daemon method pm2:getMonitorData on rpc socket:/root/.pm2/rpc.sock消息并继续打印相同的消息。我试图阅读 pm2 源代码,阅读文档并在互联网上到处寻找,但找不到解决方案。这是调试日志。

main-service_1    | 2018-12-07T18:03:49.482Z axon:sock attempting reconnect
main-service_1    | 2018-12-07T18:03:49.482Z axon:sock closing
main-service_1    | 2018-12-07T18:03:49.482Z axon:sock closing 0 connections
main-service_1    | 2018-12-07T18:03:49.482Z pm2:client Daemon not launched
main-service_1    | 2018-12-07T18:03:49.482Z axon:sock connect attempt null:/root/.pm2/rpc.sock
main-service_1    | 2018-12-07T18:03:49: PM2 log: Launching in no daemon mode
main-service_1    | 2018-12-07T18:03:49.596Z axon:sock bind null:/root/.pm2/pub.sock
main-service_1    | 2018-12-07T18:03:49.597Z axon:sock bind null:/root/.pm2/rpc.sock
main-service_1    | 2018-12-07T18:03:49.602Z interactor:client Interaction file does not exists
main-service_1    | 2018-12-07T18:03:49.602Z interactor:client Secret key is not defined in configuration { version_management: { active: true },
main-service_1    |   public_key: undefined,
main-service_1    |   secret_key: undefined,
main-service_1    |   machine_name: '572eeba2cd52',
main-service_1    |   pm2_version: '3.2.2',
main-service_1    |   reverse_interact: true,
main-service_1    |   info_node: 'https://root.keymetrics.io',
main-service_1    |   agent_transport_websocket: 'false',
main-service_1    |   agent_transport_axon: 'true' }
main-service_1    | 2018-12-07T18:03:49.604Z pm2:client Launching RPC client on socket file /root/.pm2/rpc.sock
main-service_1    | 2018-12-07T18:03:49.604Z axon:sock connect attempt null:/root/.pm2/rpc.sock
main-service_1    | 2018-12-07T18:03:49.604Z axon:sock attempting reconnect
main-service_1    | 2018-12-07T18:03:49.604Z axon:sock closing
main-service_1    | 2018-12-07T18:03:49.604Z axon:sock closing 0 connections
main-service_1    | 2018-12-07T18:03:49.604Z interactor:client Interactor Daemon not launched
main-service_1    | 2018-12-07T18:03:49.604Z axon:sock connect attempt null:/root/.pm2/interactor.sock
main-service_1    | 2018-12-07T18:03:49.604Z axon:sock attempting reconnect
main-service_1    | 2018-12-07T18:03:49.604Z axon:sock closing
main-service_1    | 2018-12-07T18:03:49.604Z axon:sock closing 0 connections
main-service_1    | 2018-12-07T18:03:49.605Z interactor:client Interactor Daemon not launched
main-service_1    | 2018-12-07T18:03:49.605Z axon:sock connect attempt null:/root/.pm2/interactor.sock
main-service_1    | 2018-12-07T18:03:49.605Z axon:sock error ENOENT
main-service_1    | 2018-12-07T18:03:49.605Z axon:sock ignored ENOENT
main-service_1    | 2018-12-07T18:03:49.605Z axon:sock error ENOENT
main-service_1    | 2018-12-07T18:03:49.605Z axon:sock ignored ENOENT
main-service_1    | 2018-12-07T18:03:49.605Z axon:sock error ENOENT
main-service_1    | 2018-12-07T18:03:49.605Z axon:sock ignored ENOENT
main-service_1    | 2018-12-07T18:03:49.606Z axon:sock accept /root/.pm2/rpc.sock
main-service_1    | 2018-12-07T18:03:49.607Z axon:sock add socket 0
main-service_1    | 2018-12-07T18:03:49.608Z axon:sock connect
main-service_1    | 2018-12-07T18:03:49.608Z axon:sock add socket 0
main-service_1    | 2018-12-07T18:03:49.608Z axon:queue flush 0 messages
main-service_1    | 2018-12-07T18:03:49.608Z pm2:client RPC Connected to Daemon
main-service_1    | 2018-12-07T18:03:49.614Z axon:sock connect attempt null:/root/.pm2/pub.sock
main-service_1    | 2018-12-07T18:03:49.614Z axon:sock accept /root/.pm2/pub.sock
main-service_1    | 2018-12-07T18:03:49.614Z axon:sock add socket 0
main-service_1    | 2018-12-07T18:03:49.614Z axon:sock connect
main-service_1    | 2018-12-07T18:03:49.614Z axon:sock add socket 0
main-service_1    | 2018-12-07T18:03:49.615Z axon:sub subscribe to "log:*"
main-service_1    | 2018-12-07T18:03:49.615Z pm2:cli Resolved filepath /ecosystem.config.js
main-service_1    | 2018-12-07T18:03:49.639Z pm2:client Calling daemon method pm2:getMonitorData on rpc socket:/root/.pm2/rpc.sock
main-service_1    | 2018-12-07T18:03:49.662Z pm2:client Calling daemon method pm2:prepare on rpc socket:/root/.pm2/rpc.sock
main-service_1    | 2018-12-07T18:03:49: PM2 log: App [API:0] starting in -fork mode-
main-service_1    | 2018-12-07T18:03:49.665Z pm2:fork_mode stds: {"out":"/root/.pm2/logs/API-out-0.log","err":"/root/.pm2/logs/API-error-0.log"}
main-service_1    | 2018-12-07T18:03:49: PM2 log: App [API:0] online
main-service_1    | 2018-12-07T18:03:49.677Z pm2:god Error vizion::analyze() for given folder: /
main-service_1    | 2018-12-07T18:03:49.678Z pm2:god Error vizion::analyze() for given folder: /
main-service_1    | 2018-12-07T18:03:55.680Z pm2:client Calling daemon method pm2:getMonitorData on rpc socket:/root/.pm2/rpc.sock
main-service_1    | 2018-12-07T18:03:57.689Z pm2:client Calling daemon method pm2:getMonitorData on rpc socket:/root/.pm2/rpc.sock
main-service_1    | 2018-12-07T18:03:59.693Z pm2:client Calling daemon method pm2:getMonitorData on rpc socket:/root/.pm2/rpc.sock
main-service_1    | 2018-12-07T18:04:01.697Z pm2:client Calling daemon method pm2:getMonitorData on rpc socket:/root/.pm2/rpc.sock

这是我用于 mainService 的 Dockerfile

FROM keymetrics/pm2:latest-jessie
COPY ./ ./
ENV MONGO_URL=http://localhost:3007/slickpoll_polls
ENV DEBUG=*
EXPOSE 3002
RUN npm install
RUN npm install -D ts-node
RUN npm install -D typescript
RUN pm2 install typescript
CMD [ "pm2-runtime", "start", "ecosystem.config.js" ]

这是我的生态系统.config.js

module.exports = {
  apps : [{
    name: 'API',
    script: 'app.ts',

    // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
    instances: 1,
    autorestart: true,
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }]
};

这是 docker-compose.yml

version: '3'

services:
    users-database:
        build: ./usersDatabase
        volumes:
            - ~/dbs/usersDatabase:/data/db
        ports:
            - 27017:3006
        networks: 
            - usersdb
    polls-database:
        build: ./pollsDatabase
        volumes:
            - ~/dbs/pollsDatabase:/data/db
        ports:
            - 27017:3007
        networks: 
            - pollsdb
    users-service:
        build: ./usersService
        ports:
            - 3004:3004
        networks: 
            - users
            - usersdb
        depends_on:
            - users-database
    poll-service:
        build: ./pollService
        ports:
            - 3003:3003
        depends_on: 
            - polls-database
        networks: 
            - pollsdb
            - api
    main-service:
        build: ./mainService
        ports:
            - 3002:3002
        networks: 
            - pollsdb
            - users
            - api
        depends_on:
            - users-database
            - users-service
            - polls-database

networks:
    users:
        driver: overlay
        internal: true
    usersdb:
        driver: overlay
        internal: true
    pollsdb:
        driver: overlay
        internal: true
    api:

我花了几乎一整天的时间来解决这个问题,但没有成功。我已经没有太大希望解决它了。我希望你能找到解决办法。

标签: dockerdocker-composepm2

解决方案


推荐阅读