Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法在docker容器中运行nodejs应用程序和mongo_Node.js_Mongodb_Docker_Sails.js - Fatal编程技术网

Node.js 无法在docker容器中运行nodejs应用程序和mongo

Node.js 无法在docker容器中运行nodejs应用程序和mongo,node.js,mongodb,docker,sails.js,Node.js,Mongodb,Docker,Sails.js,我正在使用以下Dockerfile设置一个容器 # Start with project/baseline FROM project/baseline # => image with mongo / nodejs / sailsjs # Create folder that will contain all the sources RUN mkdir -p /var/project # Load the configuration file and the deployment

我正在使用以下Dockerfile设置一个容器

# Start with project/baseline
FROM project/baseline    # => image with mongo / nodejs / sailsjs

# Create folder that will contain all the sources
RUN mkdir -p /var/project

# Load the configuration file and the deployment script
ADD init.sh /var/project/init.sh
ADD src/ /var/project/   # src contains a list of folder, each one being a sails app

# Compile the sources / run the services / run mongodb
CMD /var/project/init.sh
容器运行时调用init.sh脚本。 它应该启动一些webapp和mongodb

#!/bin/bash
PROJECT_PATH=/var/project

# Start mongodb
function start_mongo {
  mongod --fork --logpath /var/log/mongodb.log  # attempt to have mongo running in daemon
}

# Start services
function start {
  for service in $(ls);do
    cd $PROJECT_PATH/$service
    npm start  # Runs sails lift on each service
   done
}

# start mongodb
start_mongo

# start web applications defined in /var/project
start
基本上,/var/project中有几个nodejs(sailsjs)应用程序。
运行容器时,我收到以下消息:

$sudo docker运行-t-i项目/测试 即将分叉子进程,等待服务器准备好连接。 分叉过程:10

然后它仍然被卡住

mongo和sails进程如何启动,容器如何保持运行状态

更新

我现在使用这个supervisord.conf文件

[supervisord]
nodaemon=false

[program:mongodb]
command=/usr/bin/mongod

[program:process1]
command=/bin/bash "cd /var/project/service1 && node app.js"

[program:process2]
command=/bin/bash "cd /var/project/service2 && node app.js"
它在Dockerfile中调用,类似于:

# run the applications (mongodb + project related services)
CMD ["/usr/bin/supervisord"]
由于我的服务依赖于mongo的正确启动,因此supervisord不会等待那么长时间,服务也不会启动。有什么办法解决这个问题吗?
顺便问一下,在同一个容器中使用mongo是否是最佳实践

更新2

我回到了service.sh脚本,该脚本在容器运行时调用。我知道这不干净(但我会说这是临时的,所以我可以在supervisor中修复pb),但我正在做以下工作:

  • 运行nohup mongod&
  • 等60秒
  • 运行我的节点(永久)进程

问题是,容器在永久进程运行之后立即退出。。。如何使其保持活动状态?

如果您希望在一个容器中干净地启动多个服务,一个选项是使用某种流程主管。其中一个选项已记录在案


我也用过类似的方法。您可以看到我的基本映像,以及使用该映像的多服务应用程序映像。

我正在尝试使用supervisor(非常好的提示!),但我遇到了一个新问题。由于我需要在启动其他进程之前启动mongodb,因此supervisor似乎不会等待太长时间来重试运行节点进程。您可以使用shell脚本包装其他服务,该脚本在启动服务之前等待mongodb可用。因此,supervisor启动您的包装脚本,您的包装脚本等待mongodb,当它可用时,您的包装脚本启动附加服务。关于如何检查mongo是否已启动并等待连接,有什么提示吗?实际上,我对mongo一无所知,但是您可以编写一些东西来对数据库执行查询。我看到官方的mongodb文档中有一部分可能会提供一些思考的素材。