尝试使用docker-compose将我的快速应用程序连接到mongo容器时,连接被拒绝。我可以使用localhost:27017和使用dbSetup.js的l / p设置连接到robo3T的db容器,但是当express尝试连接时,我收到错误:
{MongoNetworkError:首次连接时无法连接到服务器[mongo:27017] [MongoNetworkError:connect ECONNREFUSED 172.19.0.2:27017]
// mongoose
const options = {
autoIndex: true, // Don't build indexes
reconnectTries: Number.MAX_VALUE, // Never stop trying to reconnect
reconnectInterval: 500, // Reconnect every 500ms
poolSize: 10, // Maintain up to 10 socket connections
// If not connected, return errors immediately rather than waiting for reconnect
bufferMaxEntries: 0
};
console.log(options);
mongoose.connect('mongodb://blogUser:blogUserPassword@mongo/blog', options).then(
() => { console.log("connected !!!"); },
err => { console.log(err); }
);
Docker-Compose
version: '3'
services:
mongo:
container_name: mongo
image: mongo
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
volumes:
- ./dbSetup.js:/docker-entrypoint-initdb.d/dbSetup.js
- /data/db:/data/db
ports:
- "27017:27017"
blog_api:
container_name: blog_api
build: ../blog.com/api
restart: always
expose:
- 3000
ports:
- "3000:3000"
links:
- mongo
depends_on:
- mongo
答案 0 :(得分:1)
如果您可以在 mongo
服务运行后运行应用程序,则表示mongo需要更长的时间才能启动,并且比应用程序尝试连接时更准备连接。如果您的应用程序 连接,则可能无法正常重新启动 - 如果它没有连接,您可能希望它退出,然后确保相应地设置Docker重启策略("总是","失败"等)见docs。假设mongo最终启动,您的应用程序将最终连接。
您还可以考虑使用healthchecks,在这种情况下,您可以查看数据库是否实际连接而不是启动。 depends_on
标记只会检查容器是否已启动,如果它们正常工作,它不会检查容器中的应用程序是否运行得少得多。