【问题标题】:why is my nodejs app not up but docker container is running?为什么我的 nodejs 应用程序没有启动但 docker 容器正在运行?
【发布时间】:2021-06-29 20:03:54
【问题描述】:

我尝试使用 docker 启动 nodejs 应用程序,它给出了此错误消息,但容器已启动并在端口 3000 上运行,谁能帮助我?

我使用的 Docker-compose 脚本在这里:

version: '3'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    ports:
      - "8080:8080"
    volumes:
      - "/var/jenkins_home:/var/jenkins_home"
  mongo:
    container_name: mongo
    image: mongo
    volumes:
      - ./conduit:/data/db/
    ports:
      - "27017:27017"

然后我停止容器创建 dockerfile,因为我意识到 jenkins 无法执行构建作业,这是我编写的 dockerfile

这是我的 Dockerfile

# Base image
FROM node
MAINTAINER Louis Benagha
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app

## Install app dependencies
RUN npm install
EXPOSE 3000

## run the application
CMD "start", "node ./app.js"

FROM jenkins/jenkins
USER root
RUN mkdir -p /tmp/download && \
 curl -L https://download.docker.com/linux/static/stable/x86_64/docker-18.03.1-ce.tgz | tar -xz -C /tmp/download && \
 rm -rf /tmp/download/docker/dockerd && \
 mv /tmp/download/docker/docker* /usr/local/bin/ && \
 rm -rf /tmp/download && \
 groupadd -g 999 docker && \
 usermod -aG staff,docker jenkins
USER jenkins

然后我像这样映射两个卷:

sudo docker build -t jenkins-docker .
sudo docker run -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --name jenkins -d jenkins-docker

这是错误:App crashing......

这是 package.json 文件:

{
  "name": "conduit-node",
  "version": "1.0.0",
  "description": "conduit on node",
  "main": "app.js",
  "scripts": {
    "mongo:start": "docker run --name realworld-mongo -p 27017:27017 mongo & sleep 5",
    "start": "node ./app.js",
    "dev": "nodemon ./app.js",
    "test": "newman run ./tests/api-tests.postman.json -e ./tests/env-api-tests.postman.json",
    "stop": "lsof -ti :3000 | xargs kill",
    "mongo:stop": "docker stop realworld-mongo && docker rm realworld-mongo"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/gothinkster/productionready-node-api.git"
  },
  "license": "ISC",
  "dependencies": {
    "body-parser": "1.15.0",
    "cors": "2.7.1",
    "ejs": "2.4.1",
    "errorhandler": "1.4.3",
    "express": "4.13.4",
    "express-jwt": "3.3.0",
    "express-session": "1.13.0",
    "jsonwebtoken": "7.1.9",
    "method-override": "2.3.5",
    "methods": "1.1.2",
    "mongoose": "4.4.10",
    "mongoose-unique-validator": "1.0.2",
    "morgan": "1.7.0",
    "passport": "0.3.2",
    "passport-local": "1.0.0",
    "request": "2.69.0",
    "slug": "0.9.1",
    "underscore": "1.8.3"
  },
  "devDependencies": {
    "newman": "^3.8.2",
    "nodemon": "^1.11.0"
  }
}

我在这里也有我的 GitHub 存储库:https://github.com/ArerepadeBenagha/Mojotech_test.git

【问题讨论】:

  • 它说无法连接到localhost:27017。您的 mongo DB 服务器在单独的容器上运行。试试这个 URI,mongodb://mongo 而不是 localhost:27017
  • 你是如何启动 Node 应用程序的? Jenkins 设置对这个问题很重要,还是可以删除?您能否包括打印出App crashing..... 的代码以及它遇到的任何其他错误消息或异常?
  • @DavidMaze 我有 jenkins 容器的原因是因为我使用 jenkins 来执行 CICD 工作
  • @Dilshan 你的意思是将我的 docker-compose.yaml 文件中的 27017:27017 替换为 mongodb://mongo 吗?因为我记得只有数字在端口上有效,你能给我看一个示例代码吗?
  • @louisbenagha 没有。从节点 js 应用程序连接到 mongo db 数据库的地方。

标签: node.js mongodb docker


【解决方案1】:

因为你有两个容器,每个容器都有自己的localhost,所以在你的 NodeJS 容器中,localhost 表示nodejs container,在mongo 容器中,localhost 表示mongo container,所以他们'不一样。

要解决问题,您应该将应用程序中的localhost:27017127.0.0.1:27017 替换为mongo:27017

【讨论】:

  • 你指的是 docker-compose 脚本吗?因为那是我运行 mongodb 的地方,如果你是,端口只能使用我记得的数字。如果您可以分享示例代码,以便我明白您的意思,我将不胜感激。
  • 你的软件是如何连接到mongodb的?你的数据库连接信息是什么?
  • 这是我的挑战,我的 nodejs 应用程序没有连接到 mongodb。
  • 我知道,因为你的错误显示我的意思是检查你的 NodeJS 代码,看看它在哪里尝试连接到数据库。在您的代码中查找数据库连接部分或块
  • app.use(session({ secret: 'conduit', cookie: { maxAge: 60000 }, resave: false, saveUninitialized: false })); if (!isProduction) { app.use(errorhandler()); } if(isProduction){ mongoose.connect(process.env.MONGODB_URI); } else { mongoose.connect('mongodb://localhost/conduit'); mongoose.set('debug', true); }
猜你喜欢
  • 2023-01-22
  • 2011-12-16
  • 2017-03-03
  • 2014-05-20
  • 1970-01-01
  • 2022-11-18
  • 2019-09-10
  • 1970-01-01
  • 2018-05-11
相关资源
最近更新 更多