在 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 数据库的主要内容,如果未能解决你的问题,请参考以下文章

我在 docker 容器中有 mongo db,我想连接在另一个容器上运行的应用程序

docker常用命令之mongodb启动带上现有的数据文件

docker常用命令之mongodb启动带上现有的数据文件

从主机连接到 mongo docker 容器

在 Docker 容器中安装 mongo 客户端

创建 Mongo docker 镜像并将用户添加到数据库