将nodejs应用程序从另一个容器链接到Rethinkdb

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

我想连接我的nodejs应用程序到这个RethinkDB,但每次我尝试得到一个错误

错误:{“message”:“无法连接到本地主机:58015 \ n完全错误:\ n {\”code \“:\”ECONNREFUSED \“

但是我可以将不用Docker运行的同一个nodejs应用程序连接到RethinkDB,并打开端口( 58015 )。

我的Docker组合configuration看起来像这样

 # 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 

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

 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 ,也没有成功。

我试过的每个解决scheme都不起作用。

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

我怎样才能让这个应用程序连接到我的数据库?

对于你的configuration,你应该使用# 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' }, database: { servers: [ { host: process.env.DB_PORT_28015_TCP_ADDR || 'rethink', port: process.env.DB_PORT_28015_TCP_PORT || 28015 } ], name: 'atlas' },

据我所知,一个Docker容器将不会看到另一个,除非专门链接和使用相同的networking

 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 /容器名称find彼此。 你可以用'docker network ls'来检查networking,

当使用更新版本的docker-compose时,您的服务将被configuration为在同一个networking上运行。

当你的应用程序连接到RethinkDB时,你的“docker-compose.yml”中的顶级服务名将成为需要指定的主机:

  # docker-compose.yml version: '3.2' Services: web: build: . links: db ... db: image: rethinkDB ... 

使用上面的例子,你可以通过在应用程序configuration文件中使用名为'db'的主机连接到RethinkDB:

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