如何通过 mup 更改流星部署中 mongo 的端口?

How to change port of mongo in meteor deployment by mup?

我有文件 mup.js 的 meteor 应用程序。 mongo 数据库端口同样设置为27018.

module.exports = {
  servers: {
    ...
  },

  meteor: {
    ...

    env: {
      PORT: 3000,
      ROOT_URL: 'http://app.com',
      MONGO_URL: 'mongodb://localhost:27018/meteor',
    },

    docker: {
      image: 'abernix/meteord:base',
      imagePort: 9090, // (default: 80, some images EXPOSE different ports)
    },

    ...
  },

  mongo: {
    port: 27018,
    version: '3.4.1',
    servers: {
      ...
    }
  }
};

我想在端口 27018 上设置 mongo,因为在服务器上的端口 27017 上有 mongo。但是当我输入:

 mup setup

我获得:

    -----------------------------------STDERR----------------------------------- 
    Error response from daemon: Container 
bb3277bc8eb71f7dc943bee81b429e0ff0343e5905f6695ed2c7cad2b562317f is not 
running     docker: Error response from daemon: driver failed programming 
external connectivity on endpoint mongodb 
(fd60247139585238bfa24a42d2fd6221c08e2d2a053d4d03ffedbbab5604fd9a): Error 
starting userland proxy: listen tcp 127.0.0.1:27017: bind: address already in
 use.   
-----------------------------------STDOUT-----------------------------------

        3.4.1: Pulling from library/mongo   Digest: 
sha256:aff0c497cff4f116583b99b21775a8844a17bcf5c69f7f3f6028013bf0d6c00c     
Status: Image is up to date for mongo:3.4.1     mongodb     mongodb     
Running mongo:3.4.1     
7dcf91a6f136d85a884323c0a1230a673d8f25a9197dc85738e44e30139c6035    
----------------------------------------------------------------------------

如何确保使用端口 27018 而不是 27017?

Meteor github 中有一个 issue 与您要执行的操作相关。不幸的是,嵌入式 mongo 端口似乎还不可配置。如果你设置了 MONGO_URL 环境变量,Meteor 将不会启动 mongo 的实例,它只会尝试连接给定的 url。

如果您希望 mongo 为您启动一个 mongo 的实例,它将在默认端口上执行,即 meteor 端口 + 1。 来自 meteor help run 文档:

--port, -p Port to listen on (instead of the default 3000). Also uses port N+1 and a port specified by --app-port. Specify as --port=host:port to bind to a specific interface.

因此,如果您 运行 默认 (3000) 端口上的 meteor 应用程序,您将在 3001 上有一个 mongo 实例。

如果您需要在特定端口上有一个 mongo 实例,您唯一的选择是单独部署数据库。以下是一些关于如何对 mongo 部署进行 docker 化的文档: https://docs.docker.com/engine/examples/mongodb/

通过一些工作,您可以编写一个 dockerfile,您的 mup 可以使用它来部署 mongo 实例和您的应用程序。

希望对您有所帮助。