我制作了两个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
)但没有成功。
我尝试将这两个容器与links
,network_mode
相关联,但也没有成功。
我尝试的每个解决方案都不起作用。
我认为当nodejs应用尝试连接时,我的Rethink容器还没有准备好。我真的不明白这个问题,如果这不是这个。 nodejs app正在运行pm2
如何让这个应用程序连接到我的数据库?
答案 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:
答案 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
}
};