当前位置: 首页 > 知识库问答 >
问题:

在Docker容器上使用mongo cmd时无法查看我的mongo数据库

穆文斌
2023-03-14

类似于无法从其他Docker容器连接到MongoDB容器,但这篇文章的答案对我来说并不适用。

我是Docker的新手。尝试在typescript/express/mongo/mongoose api示例中学习它。

我正在尝试做的(并且遇到问题)是在运行的mongo容器上使用mongo cmd line,在它使用docker compose up旋转后。即使我的数据很好地保存在Docker卷上,我似乎无法使用cmd line登录数据库。

这是我的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个答案

宓博实
2023-03-14

列出数据库需要身份验证

docker exec -it mongo_container mongo -u myself -p pass123

现在您可以列出数据库

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

注意:mongo应该向您显示“mongo”shell已被“mongonh”取代的警告。当您使用mongonh时,数据库列表尝试中将显示正确的身份验证错误。

 类似资料:
  • 问题内容: 我无法在Docker容器中运行任何yum命令,而没有出现以下错误: 我很困惑,因为我非常确定docker容器是使用默认用户root运行的。不过,如果我尝试将sudo放在a 或command 前面,则会得到: 我正在使用以下基本映像,以便可以在Docker中轻松运行Java Wildfly应用程序:https ://hub.docker.com/r/jboss/wildfly/ 底层发行

  • 问题内容: 这是我的docker-compose文件: 这是我的entrypoint_mongo.sh 我面临的问题是:mongo容器正在成功执行所有步骤,但是退出时的状态为0。 问题答案: 您的启动脚本不应初始化或监视副本集。这些应该是手动任务。 您应该记住: 严格来说,启动副本集是一次性的工作;一旦启动,MongoDB服务在重新启动后将继续成为同一副本集的一部分。 副本集通常包含多个应可互换的

  • 问题内容: 有什么办法可以查看已退出的容器的日志? 我可以使用来获取已退出容器的容器ID,但是我想知道它在运行时发生了什么。 问题答案: 使用。它也适用于停止的容器,并捕获容器主过程的整个STDOUT和STDERR流:

  • 我如何访问Docker使用RoboMongo或类似工具创建的mongo数据库? 在使用Doncker之前,我已经在Linux机器上安装了mongodb。所以我不能在docker compse中使用端口“27017:27017”。yml。我使用“27018:27018”: 我可以使用RoboMongo查看我在预docker mongo中创建的所有数据库。但是我怎样才能进入码头工人的房间呢? 这是我的

  • 我最担心的情况发生了:我的纯数据docker容器突然是空的。 这并不严重:这是一台开发机器,我有备份。但我最害怕的是,因为我知道我对Docker的理解仍然存在漏洞。 我在这个答案中读到了以下内容: Docker容器将一直保留在磁盘上,直到使用Docker rm显式删除它们。 以下是我感兴趣的容器(来自命令): 我有一个1)一个引用纯数据容器的mongo容器和2)纯数据容器本身。我最近在引用纯数据容

  • 问题内容: 最近,我在Oracle Linux上安装了Docker CE。 不幸的是,当我想用​​以下方法启动第一个容器时: 我收到此错误消息: 泊坞窗:来自守护程序的错误响应:OCI运行时创建失败:container_linux.go:345:启动容器进程导致“ process_linux.go:430:容器初始化引起了\“ write / proc / self / attr / keycre