使用docker-compose

时间:2018-02-13 19:02:18

标签: node.js docker mongoose docker-compose

我有一台使用Mongo数据库的Node Express服务器。

我正在尝试使用docker-compose为每个人创建一个容器。

这是我的docker-compose.yml文件:

version: "2"
 services:
  server:
    container_name: server
    restart: always
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    container_name: db
    image: mongo
    volumes:
      - /var/lib/mongodb:/data/db
    ports:
      - "27017:27017"

我的Dockerfile

FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app
RUN npm install
COPY . /usr/src/app
RUN npm run build-run
EXPOSE 3000

我在许多教程中看到,当使用Docker创建Mongo容器时,应在mongoose.connect中更新连接字符串以使用Docker容器命名解析。

所以我根据docker-compose文件更改了连接字符串:

private readonly CONNECTION_STRING: String = 'mongodb://db/search-people-db'

public connect(): void {
    mongoose.connect(this.CONNECTION_STRING)

    this._db.on('error', (err) => {
        console.log(`mongoose server failed to start: ${err}`)
    })

    this._db.once('open', () => {
        console.log(`mongoose server running using ${this.CONNECTION_STRING}`)
    })
}'

但是,在运行sudo docker-compose up时,我不断收到以下错误:

Mongoose服务器无法启动:MongoNetworkError:首次连接时无法连接到服务器[db:27017] [MongoNetworkError:getaddrinfo ENOTFOUND db db:27017]

我做错了什么?提前致谢

2 个答案:

答案 0 :(得分:1)

MongoDB的容器启动但MongoDB本身需要更多时间启动。因此,在完全启动之前,您的应用程序将无法连接到它。

正如Docker的文档建议的那样,您应该为应用程序设置等待时间,然后运行代码。 我建议让mongoose尝试重新连接,如果第一次无法连接或让应用程序崩溃,如果它无法连接。 Docker将再次运行您的容器。

答案 1 :(得分:0)

将docker-compose.yml中的depends_on替换为links,然后尝试再次运行命令。