多容器 Docker 应用程序部署失败

Posted

技术标签:

【中文标题】多容器 Docker 应用程序部署失败【英文标题】:Multicontainer Docker application failing on deploy 【发布时间】:2018-11-07 02:38:31 【问题描述】:

所以我在将我的应用程序部署到 Amazon 的弹性 beanstalk 时遇到了问题。我的应用程序是一个多容器 Docker 应用程序,其中包括节点服务器和 mongoDB。不知何故,应用程序每次都会崩溃,我从 mongoDB 得到这个奇怪的错误。 错误如下:

18-05-28T12:53:02.510+0000 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 3867 processes, 32864 files. Number of processes should be at least 16432 : 0.5 times number of files.
2018-05-28T12:53:02.540+0000 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2018-05-28T12:53:02.541+0000 I NETWORK  [initandlisten] waiting for connections on port 27017
2018-05-28T12:53:03.045+0000 I CONTROL  [signalProcessingThread] got signal 15 (Terminated), will terminate after current cmd ends
2018-05-28T12:53:03.045+0000 I NETWORK  [signalProcessingThread] shutdown: going to close listening sockets...
2018-05-28T12:53:03.045+0000 I NETWORK  [signalProcessingThread] removing socket file: /tmp/mongodb-27017.sock
2018-05-28T12:53:03.045+0000 I FTDC     [signalProcessingThread] Shutting down full-time diagnostic data capture
2018-05-28T12:53:03.047+0000 I STORAGE  [signalProcessingThread] WiredTigerKVEngine shutting down
2018-05-28T12:53:03.161+0000 I STORAGE  [signalProcessingThread] shutdown: removing fs lock...
2018-05-28T12:53:03.161+0000 I CONTROL  [signalProcessingThread] now exiting
2018-05-28T12:53:03.161+0000 I CONTROL  [signalProcessingThread] shutting down with code:0

这是我的 Dockerrun.aws.json 文件:


  "AWSEBDockerrunVersion": 2,
  "volumes":[
    
      "name": "mongo-app",
      "host": 
        "sourcePath": "/var/app/mongo-app"
      
    ,
    
      "name": "some-api",
      "host": 
        "sourcePath": "/var/app/some-api"
      
    
  ],
  "containerDefinitions": [
      
        "name": "mongo-app",
        "image": "mongo:latest",
        "memory": 128,
        "portMappings": [
          
            "hostPort": 27017,
            "containerPort": 27017
          
        ],
        "mountPoints": [
          
            "sourceVolume": "mongo-app",
            "containerPath": "/data/db"
          
        ]
      ,
      
        "name": "server",
        "image": "node:8.11",
        "memory": 128,
        "portMappings": [
          
            "hostPort": 80,
            "containerPort": 8001
          
        ],
        "links": [
          "mongo-app"
        ],
        "mountPoints":[
          
            "sourceVolume": "some-api",
            "containerPath": "/some-data"
          
        ]
      
  ]

这是我的 Dockerfile:

FROM node:8.11
RUN mkdir -p /api
WORKDIR /api
COPY package.json /api
RUN cd /api && npm install
COPY . /api
EXPOSE 8001
CMD ["node", "api/app.js"]

任何想法为什么应用程序崩溃并且没有部署?在我看来是 mongoDB 导致了问题,但我无法理解或找到问题的根源。

提前谢谢你!

【问题讨论】:

【参考方案1】:

我也花了一段时间试图弄清楚这一点。

解决方案:为"containerPath": "/data/configdb" 添加一个挂载点。 Mongo 希望能够同时写信给/data/db/data/configdb

另外,您可能希望将 Mongo 的 "memory": 128 提升到更高的级别。

【讨论】:

以上是关于多容器 Docker 应用程序部署失败的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core容器化之多容器应用部署@Docker-Compose

使用 EBS 部署多容器 docker 环境(flask 和 nginx)

Docker中使用Nginx部署多应用

前端应用容器化部署 Docker

Docker部署Docker-compose部署redis容器及启动失败挂载失败等问题

Docker部署Docker-compose部署redis容器及启动失败挂载失败等问题