MongoDB 是一个开源的跨平台文档型数据库程序,属于 NoSQL 数据库类别。它使用类 JSON 文档(BSON)存储数据,支持动态模式,无需预先定义表结构。MongoDB 由 MongoDB Inc. 开发,发布于 Server Side Public License (SSPL) 和 Apache License 许可下。其核心优势在于提供高可用性和轻松扩展性,适用于需要灵活数据模型和大规模数据存储的应用场景。
MongoDB 适用于以下场景:
8.0.15-noble, 8.0-noble, 8-noble, noble
Dockerfile
7.0.25-jammy, 7.0-jammy, 7-jammy
Dockerfile
6.0.26-jammy, 6.0-jammy, 6-jammy
Dockerfile
8.0.15, 8.0, 8, latest
对应基础镜像:8.0.15-noble
7.0.25, 7.0, 7
对应基础镜像:7.0.25-jammy
6.0.26, 6.0, 6
对应基础镜像:6.0.26-jammy
使用 docker run 命令启动一个 MongoDB 容器:
console$ docker run --name some-mongo -d amd64/mongo:tag
some-mongo:自定义容器名称tag:指定 MongoDB 版本标签(如 8.0.15-noble,完整标签列表见上文)MongoDB 默认监听 27017 端口,可通过 Docker 网络实现容器间通信。示例:启动客户端容器连接到已运行的 MongoDB 实例:
console$ docker run -it --network some-network --rm amd64/mongo mongosh --host some-mongo test
some-network:Docker 网络名称(需提前创建或使用默认网络)some-mongo:目标 MongoDB 容器名称test:连接的数据库名称以下是 compose.yaml 配置示例,包含 MongoDB 服务和管理界面(mongo-express):
yamlservices: mongo: image: amd64/mongo:8.0.15-noble # 指定版本标签 restart: always environment: MONGO_INITDB_ROOT_USERNAME: root # 初始化 root 用户 MONGO_INITDB_ROOT_PASSWORD: example # root 用户密码 volumes: - mongo-data:/data/db # 持久化数据存储 mongo-express: image: mongo-express restart: always ports: - "8081:8081" # 暴露管理界面端口 environment: ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/ # 连接 MongoDB 的 URL ME_CONFIG_BASICAUTH_ENABLED: "true" # 启用基础认证 ME_CONFIG_BASICAUTH_USERNAME: mongoexpressuser # 管理界面用户名 ME_CONFIG_BASICAUTH_PASSWORD: mongoexpresspass # 管理界面密码 depends_on: - mongo # 依赖 MongoDB 服务 volumes: mongo-data: # 定义命名卷,用于持久化 MongoDB 数据
启动服务:
console$ docker compose up -d
访问管理界面:http://localhost:8081
使用 docker exec 命令获取容器内 bash 终端:
console$ docker exec -it some-mongo bash
通过 Docker 容器日志查看 MongoDB 服务输出:
console$ docker logs some-mongo
可通过命令行参数直接传递 mongod 配置项。示例:启用查询分析器(profiler):
console$ docker run --name some-mongo -d amd64/mongo --profile 1
在 docker-compose 中配置:
yamlservices: mongo: image: amd64/mongo command: --profile 1 # 传递 mongod 参数
查看所有支持的参数:
console$ docker run -it --rm amd64/mongo --help
若需复杂配置,可挂载自定义 mongod.conf 文件:
准备配置文件(如 /my/custom/mongod.conf):
inistorage: dbPath: /data/db journal: enabled: true net: port: 27017 bindIp: 0.0.0.0
启动容器时挂载配置文件:
console$ docker run --name some-mongo -v /my/custom:/etc/mongo -d amd64/mongo --config /etc/mongo/mongod.conf
-v /my/custom:/etc/mongo:将主机目录 /my/custom 挂载到容器内 /etc/mongo--config /etc/mongo/mongod.conf:指定配置文件路径容器启动时可通过环境变量初始化 MongoDB 实例(仅首次启动且数据目录为空时生效):
MONGO_INITDB_ROOT_USERNAME 与 MONGO_INITDB_ROOT_PASSWORDroot 角色(权限覆盖所有数据库)console$ docker run -d --name some-mongo \ -e MONGO_INITDB_ROOT_USERNAME=mongoadmin \ -e MONGO_INITDB_ROOT_PASSWORD=secret \ amd64/mongo
使用 mongosh 连接:
console$ docker run -it --rm amd64/mongo mongosh --host some-mongo -u mongoadmin -p secret --authenticationDatabase admin
MONGO_INITDB_DATABASE.js 文件)的默认数据库testMONGO_INITDB_DATABASE=appdb,则 /docker-entrypoint-initdb.d/*.js 脚本默认在 appdb 数据库上下文执行可通过文件注入敏感信息(如密码),环境变量名后添加 _FILE 后缀,值为容器内文件路径。示例:
console$ docker run --name some-mongo \ -e MONGO_INITDB_ROOT_PASSWORD_FILE=/run/secrets/mongo-root-password \ -v /host/secrets:/run/secrets \ amd64/mongo
/host/secrets/mongo-root-password:主机上存储密码的文件容器首次启动时,/docker-entrypoint-initdb.d 目录下的 .sh 和 .js 文件会按字母顺序执行,用于初始化数据库(如创建用户、插入数据)。
init.js 文件:javascript// 创建普通用户并授权 db.createUser({ user: "appuser", pwd: "apppass", roles: [{ role: "readWrite", db: "appdb" }] }); // 插入测试数据 db.appdb.insertOne({ name: "Initial Data", value: "Hello MongoDB" });
console$ docker run --name some-mongo -v /host/init-scripts:/docker-entrypoint-initdb.d -d amd64/mongo
/host/init-scripts:主机上存放初始化脚本的目录MongoDB 数据默认存储在容器内 /data/db 目录,建议通过以下方式持久化数据:
console$ docker run --name some-mongo -v mongo-data:/data/db -d amd64/mongo
mongo-data:命名卷,由 Docker 管理,数据持久化于主机 /var/lib/docker/volumes/ 目录console$ docker run --name some-mongo -v /host/data:/data/db -d amd64/mongo
SERVER-8600 问题),建议使用 Docker 卷替代。使用 mongodump 工具导出数据,示例:
console$ docker exec some-mongo sh -c 'exec mongodump -d appdb --archive' > /host/backups/appdb.archive
appdb:需备份的数据库名称/host/backups/appdb.archive:主机上的备份文件路径MongoDB 软件许可遵循 Server Side Public License (SSPL) v1 和 Apache License。注意:2018 年 10 月 16 日之后的版本从 AGPL 变更为 SSPLv1。
镜像中包含的其他软件(如基础系统组件、Bash 等)可能遵循不同许可证,详细信息见 repo-info 仓库。
使用本镜像需确保符合所有包含软件的许可证要求。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429