我刚开始学习docker,在这里学习了stuch。这是我的compose.yaml文件,里面有mongo和mongo-express最新版本的用例。mongo-express没有连接到mongodb,尝试了mongo-express中的重启功能,它一直在重启mongo-express,我觉得它没有连接到mongodb。我尝试了网络,但没有改变任何东西。
version: "3"
services:
mongodb:
image: mongo
ports:
- "27017:27017"
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password
# networks:
# - mongo-network
mongo-express:
image: mongo-express
# restart: on-failure
ports:
- "8081:8081"
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
- ME_CONFIG_MONGODB_ADMINPASSWORD=password
- ME_CONFIG_MONGODB_ADMINSERVER=mongodb
- ME_CONFIG_MONGODB_PORT=27017
# networks:
# - mongo-network
depends_on:
- mongodb
这是我从mongo-express容器的命令提示符中得到的错误:
2022-11-15 10:39:21 Welcome to mongo-express
2022-11-15 10:39:21 ------------------------
2022-11-15 10:39:21
2022-11-15 10:39:21
2022-11-15 10:39:21 (node:7) [MONGODB DRIVER] Warning: Current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
2022-11-15 10:39:26 Could not connect to database using connectionString: mongodb://mongo:27017"
2022-11-15 10:39:26 (node:7) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [mongo:27017] on first connect [Error: getaddrinfo EAI_AGAIN mongo
2022-11-15 10:39:26 at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) {
2022-11-15 10:39:26 name: 'MongoNetworkError'
2022-11-15 10:39:26 }]
2022-11-15 10:39:26 at Pool.<anonymous> (/node_modules/mongodb/lib/core/topologies/server.js:441:11)
2022-11-15 10:39:26 at Pool.emit (events.js:314:20)
2022-11-15 10:39:26 at /node_modules/mongodb/lib/core/connection/pool.js:564:14
2022-11-15 10:39:26 at /node_modules/mongodb/lib/core/connection/pool.js:1000:11
2022-11-15 10:39:26 at /node_modules/mongodb/lib/core/connection/connect.js:32:7
2022-11-15 10:39:26 at callback (/node_modules/mongodb/lib/core/connection/connect.js:300:5)
2022-11-15 10:39:26 at Socket.<anonymous> (/node_modules/mongodb/lib/core/connection/connect.js:330:7)
2022-11-15 10:39:26 at Object.onceWrapper (events.js:421:26)
2022-11-15 10:39:26 at Socket.emit (events.js:314:20)
2022-11-15 10:39:26 at emitErrorNT (internal/streams/destroy.js:92:8)
2022-11-15 10:39:26 at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
2022-11-15 10:39:26 at processTicksAndRejections (internal/process/task_queues.js:84:21)
2022-11-15 10:39:26 (node:7) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
2022-11-15 10:39:26 (node:7) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
1条答案
按热度按时间wixjitnu1#
根据文档,服务器环境变量不是ME_CONFIG_MONGODB_ADMINSERVER,而是ME_CONFIG_MONGODB_SERVER:https://hub.docker.com/_/mongo-express
你还需要为mongodb添加一个healthcheck,并让mongo-express依赖它,因为节点在第一次失败的连接后退出,退出代码为0,正如日志中所写的。如果它以非零退出代码退出,只要它没有失败,docker就会尝试重新启动容器。日志中说这将是未来的方式,但现在你需要healthcheck。
(node:7)[DEP 0018]过时警告:不赞成使用未处理的承诺拒绝。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。
因此,此合成文件的工作原理如下: