在 Docker 容器上使用 mongo 命令时看不到我的 mongodb 数据库
Posted
技术标签:
【中文标题】在 Docker 容器上使用 mongo 命令时看不到我的 mongodb 数据库【英文标题】:Can't see my mongo database when using mongo cmd on a Docker container 【发布时间】:2022-01-20 09:17:33 【问题描述】:类似于 Can't connect to MongoDB container from other Docker container - 但这篇文章的答案对我不起作用。
我是 Docker 新手。尝试在 typescript/express/mongo/mongoose api 示例中学习它。
我正在尝试做的(并且遇到问题)是在使用 docker compose up
启动运行的 mongo 容器后使用 mongo cmd 行。尽管我的数据很好地保存在 Docker 卷上,但我似乎无法使用 cmd 行登录数据库。
这是我的docker-compose.yml
文件:
version: '3.9'
services:
api:
container_name: api_ts
build: .
restart: unless-stopped
environment:
- DB_URL=mongodb://myself:pass123@mongo:27017/
ports:
- '3131:3131'
depends_on:
- mongo
links: # (seems to be needed)
- mongo
mongo:
container_name: mongo_container
image: mongo:latest
restart: always
volumes:
- mongo_dbv:/data/db
environment:
- MONGO_INITDB_ROOT_USERNAME=myself
- MONGO_INITDB_ROOT_PASSWORD=pass123
ports:
- '27017:27017'
volumes:
mongo_dbv:
这是我的 Dockerfile:
FROM node:alpine
WORKDIR /usr/src/app
COPY package*.json .
RUN npm ci
COPY . .
ENV PORT=3131
EXPOSE 3131
COPY .env ./dist
CMD ["npm", "start"]
我在跑步
docker compose up -d --build
在两个服务都准备好之后,我做:
docker exec -it mongo_container mongo
show dbs
...最后一个cmd的输出为空
(在尝试遵循上述帖子中的答案时也会发生同样的情况)
我确定数据库包含数据,因为我可以使用 REST 客户端对其进行验证。
另外,我有点困惑 - 也许这有某种联系 - 为什么在 docker-compose.yml 或 Dockerfile 中没有指示我正在使用的 数据库名称 .我希望它成为show dbs
输出的一部分。尽管如此,我的 api 运行良好。
【问题讨论】:
【参考方案1】:列出数据库需要身份验证
docker exec -it mongo_container mongo -u myself -p pass123
现在您可以列出数据库
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
注意:mongo 应该向您显示“mongo”外壳已被“mongosh”取代的警告。当您使用 mongosh 时,数据库列表尝试会显示正确的身份验证错误。
【讨论】:
是的,这正是发生的事情:) 谢谢。事实证明,我的所有数据都在test
db 中。需要弄清楚如何更好地配置容器和我的应用程序以显式命名数据库。以上是关于在 Docker 容器上使用 mongo 命令时看不到我的 mongodb 数据库的主要内容,如果未能解决你的问题,请参考以下文章