将nodejs app从另一个容器链接到Rethinkdb

时间:2016-12-20 14:19:07

标签: node.js docker docker-compose rethinkdb

我制作了两个2个容器,一个用于RethinkDB,另一个用于nodejs应用程序。

我想将我的nodejs应用程序连接到此RethinkDB,但每次尝试都会出错

  

错误:{“message”:“无法连接到localhost:58015 \ n全部错误:\ n {\”code \“:\”ECONNREFUSED \“

但我可以使用开放端口(58015)将没有Docker运行的相同nodejs应用程序连接到RethinkDB。

我的Docker撰写配置看起来像这样

# Rethink DB
rethink:
  build: docker/rethinkdb
  container_name: rethink
  ports:
    - 58080:8080
    - 58015:28015
    - 59015:29015

# NodeJS
nodejs:
  build: docker/nodejs
  container_name: nodejs
  ports:
    - 53000:3000
    - 55000:5000
  depends_on:
    - rethink

要将我的应用程序连接到数据库,我在JS配置文件中设置了主机和端口

database: {
    servers: [
        {
            host: process.env.DB_PORT_28015_TCP_ADDR || 'localhost',
            port: process.env.DB_PORT_28015_TCP_PORT || 28015
        }
    ],
    name: 'atlas'
},

我尝试使用RethinkDB端口(28015)和我的开放端口(58015)但没有成功。

我尝试将这两个容器与linksnetwork_mode相关联,但也没有成功。

我尝试的每个解决方案都不起作用。

我认为当nodejs应用尝试连接时,我的Rethink容器还没有准备好。我真的不明白这个问题,如果这不是这个。 nodejs app正在运行pm2

如何让这个应用程序连接到我的数据库?

3 个答案:

答案 0 :(得分:1)

对于你的配置,你应该使用 # Rethink DB rethink: build: docker/rethinkdb container_name: rethink ports: - 58080:8080 - 58015:28015 - 59015:29015 # NodeJS nodejs: build: docker/nodejs container_name: nodejs ports: - 53000:3000 - 55000:5000 links: - rethink depends_on: - rethink

并在JS代码中 database: { servers: [ { host: process.env.DB_PORT_28015_TCP_ADDR || 'rethink', port: process.env.DB_PORT_28015_TCP_PORT || 28015 } ], name: 'atlas' },

答案 1 :(得分:0)

据我所知,除非特别链接并使用相同的 net ,否则一个Docker容器将看不到另一个:

docker run \
   --name ${NEWAPP} \
   --restart=always \
   --env MYAPPPAR=${PROJ} \
   -v /var/log/docker/node/logs:/usr/src/app/log \
   --link myapp_rethink_1:myapp_rethink_1 \
   --net myapp_default \
   -p ${PORT}:9000 \
   -d ${NEWAPP}

所以你需要--net和--link:

  • - 链接格式为sourcecontainername:containeraliasname
  • - net,以便容器可以使用内部DNS /容器名找到彼此。您可以使用'docker network ls'
  • 检查网络

答案 2 :(得分:0)

使用较新版本的docker-compose时,您的服务将配置为在同一网络上运行。

您的' docker-compose.yml'中的顶级服务名称从您的应用程序连接到RethinkDB时,它将成为需要指定的主机:

    # docker-compose.yml

    version: '3.2'
    Services:
      web:
        build: .
        links: db
        ...
      db:
        image: rethinkDB
        ...

使用上面的示例,您可以使用app app配置文件中名为' db'的主机连接到RethinkDB:​​

    module.exports = {
      rethinkdb: {
        host: 'db',
        port: 28015
     }
   };