ChatGPT解决这个技术问题 Extra ChatGPT

如何在 docker 容器中启动 mongodb shell?

要启动容器,我输入以下命令:

sudo docker run -i -t -p 28000:27017 mongo:latest /usr/bin/mongod --smallfiles

但是我想在这个容器中打开 shell 来输入 mongo 命令。我应该运行什么命令来做同样的事情?


M
Michael Mior

您可以通过运行以下命令来运行交互式 mongo shell:

docker run -it -p 28000:27017 --name mongoContainer mongo:latest mongo

否则,如果您的容器已经在运行,您可以使用 exec 命令:

docker exec -it mongoContainer mongo

错误:找不到命令:exec 错误:找不到命令:-it 用法:docker [OPTIONS] COMMAND [arg...] -H=[unix:///var/run/docker.sock]: tcp:// host:port 绑定/连接或 unix://path/to/socket 使用
你目前安装的是什么版本的 docker? exec 命令已在 1.3.0 版本中引入
你需要升级,我们已经升级到 1.8 并且 docker 的管道发生了很多变化。或者使用 nsentry (不确定它是否支持你的 docker 版本)。
正如 booyaa 所提到的,您应该更新主机上的 docker,因为您当前使用的是不提供最新可用功能的旧版本
我更新了 docker 版本,它有所帮助。非常感谢!
A
Aleksandr Krasnov

我也很努力但找到了解决方案的事情:

docker pull mongo
docker run --name CONTAINERNAME --restart=always -d -p 8080:8080 mongo mongod --auth
sudo docker exec -i -t CONTAINERNAME bash
mongo
use admin
db.createUser({user:"user", pwd:"password", roles:[{role:"root", db:"admin"}]})
exit && exit

现在您已经创建了一个运行中的 Docker 容器,其中包含您需要的一切。现在,如果您想从任何具有管理员用户的客户端连接,只需运行此

mongo -u "user" -p "password" HOSTIP --authenticationDatabase "admin"

作为安全预防措施,请使用 -p 标志,但不要输入您的密码,因为它会出现在您的 bash / shell 历史记录中。
A
Aman Rathod

从 Docker Hub 下载最新的 MongoDB Docker 镜像

sudo docker pull mongo

现在设置 MongoDB 容器

docker run --name containername mongo

通过 bash shell 客户端与数据库交互

docker exec -it containername bash

启动 MongoDB shell 客户端

mongo

R
Roman

扩展和更新 @vladzam 答案,如果您的容器已经在 docker 中运行,您可以使用 exec mongosh 命令登录并传递如下选项:

docker exec -it database-dev mongosh -u "myLogin" -p "myPass"

M
Madhavi Jouhari

假设您在主机上安装了 mongo,这就是我几年前问这个问题时的情况。这是我尝试过的另一种方法:打开一个新终端

mongo 127.0.0.1:28000

您的 mongo shell 现在在此终端中启动。


那如何“在 docker 容器中启动一个 mongodb shell”?
@qqilihq:上述命令将 mongo 容器作为后端的守护进程启动。使用此命令,我能够连接到正在运行的容器,并在其中执行 mongo 查询。虽然我明白你的意思,但这个命令并没有“启动”它,它连接到已经运行的容器。
此命令假定您在主机上安装了 mongo。当您在容器中运行 mongodb 时,除非您单独安装 ot,否则您的主机上不会有 mongo 可执行文件。
正如其他人所说的那样,这个答案强烈假设已经在本地机器上安装了 mongo。与 Docker 无关。