将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
)没有成功。
我试图链接这两个容器与links
, network_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 } };