【问题标题】:How to deploy mean stack application in docker?如何在docker中部署平均堆栈应用程序?
【发布时间】:2017-03-21 13:54:58
【问题描述】:

如何在 docker 中部署平均堆栈应用程序?
我在 mongodb 连接中有错误。所以意味着堆栈 Web 应用程序没有响应。

这是我的步骤:

  1. 拉了image from DockerHub

    sudo docker pull crissi/airlineinsurance
    
  2. 经过验证的图片

    sudo docker images
    
  3. 运行 mongodb 容器

    sudo docker run -d -p 27017:27017 --name airlineInsurance -d mongo
    
  4. 验证它正在运行:

    sudo docker ps -l
    
  5. 运行应用程序容器

    sudo docker run -d -P crissi/airlineinsurance
    
  6. 验证人:

    sudo docker ps -l
    
  7. 检查日志

    sudo docker logs 8efba551fdc6
    

结果日志如下:

[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node server.js`
Server running at http://127.0.0.1:9000
Server running at https://127.0.0.1:9030

/app/node_modules/mongodb/lib/server.js:261
        process.nextTick(function() { throw err; })
                                      ^
MongoError: failed to connect to server [localhost:27017] on first connect
    at Pool.<anonymous> (/app/node_modules/mongodb-core/lib/topologies/server.js:313:35)
    at emitOne (events.js:96:13)
    at Pool.emit (events.js:188:7)
    at Connection.<anonymous> (/app/node_modules/mongodb-core/lib/connection/pool.js:271:12)
    at Connection.g (events.js:291:16)
    at emitTwo (events.js:106:13)
    at Connection.emit (events.js:191:7)
    at Socket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:165:49)
    at Socket.g (events.js:291:16)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at emitErrorNT (net.js:1281:8)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)
[nodemon] app crashed - waiting for file changes before starting...

我已包含 DockerFile 供您参考

  # Tells the Docker which base image to start.
  FROM node

  # Adds files from the host file system into the Docker container.  
  ADD . /app

  # Sets the current working directory for subsequent instructions
  WORKDIR /app

   RUN npm install
   RUN npm install -g bower
   RUN bower install --allow-root
   RUN npm install -g nodemon

   #expose a port to allow external access
   EXPOSE 9030

   # Start mean application
   CMD ["nodemon", "server.js"] 

【问题讨论】:

  • 这里没有足够的信息来帮助您。您至少应该包含错误消息以及如何启动容器。
  • 报错信息显示mongodb连接失败..能否提供一些在docker中部署mean stack应用的文档...
  • 正如我所说,您没有提供足够的信息来回答您的问题。也许它与您如何启动容器有关,也许它与您的连接字符串有关,也许它是其他东西。如果您想了解使用 Docker 部署节点应用程序的一般说明,请尝试 Google。
  • 我已经提到了这些步骤。您可以从 DockerHub 中提取我的应用程序的映像作为 crissi/airlineinsurance ......请检查@ROMANARMY
  • 您应该编辑您的问题以包含所有这些步骤。

标签: docker mean-stack


【解决方案1】:

这取决于您如何定义 Dockerfile。
由于您的应用涉及多个进程(您的应用 + mongodb),您可以use supervisor to launch both

使用supervisord.conf 来查看this example,例如:

[supervisord]
nodaemon=true

[program:mongod]
command=/usr/bin/mongod --smallfiles
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
autorestart=true

[program:nodejs]
command=nodejs /opt/app/server/server.js 

用您自己的应用程序替换 nodejs 命令。

【讨论】:

  • 我已包含 DockerFile 供您参考。请务必提及使用 Supervisor 所需的修改。 @VonC​​pan>
  • @criss 您可以将stackoverflow.com/a/27828210/6309 中提到的部分添加到您的Dockerfile 中,并将您的CMD 命令移动到supervisor.conf。目标仍然是启动 mongo 和您的应用程序。
  • 我已经尝试过,但它返回并出现以下错误。 docker:来自守护进程的错误响应:无效的标头字段值“oci运行时错误:container_linux.go:247:启动容器进程导致\”exec:\\\“/usr/bin/supervisord\\”:stat /usr/bin /supervisord: 没有这样的文件或目录\"\n"
  • @criss sure:您需要安装主管。检查文档 (docs.docker.com/engine/admin/using_supervisord)
  • @criss 对于docker本身,最好先学一些教程:docker.atbaker.me/exercises/exercise_1.html,katacoda.com/learn
猜你喜欢
  • 2020-03-13
  • 2018-05-09
  • 2016-07-23
  • 1970-01-01
  • 2018-07-13
  • 2019-11-24
  • 2018-12-07
  • 2017-04-18
  • 2013-12-15
相关资源
最近更新 更多