gpt4 book ai didi

mongodb - 为什么数据会保留在 mongo docker 容器中?

转载 作者:行者123 更新时间:2023-12-02 18:10:57 24 4
gpt4 key购买 nike

根据我的理解,新容器在死后不应该保留数据。

现在我有两个 Dockerfile。一个用于我的应用程序,另一个用于为数据库做种子。

这是我的项目结构

/
package.json
Dockerfile
docker-compose.yml
mongo-seeding/
Dockerfile
seedDatabase.mjs

这是我的 seedDatabase好像
import mongodb from "mongodb";
import data from "./dummyData";

// Connection URL
const url = "mongodb://mongo:27017/poc";

async function mongoSeeder() {
try {
// first check to see if the database exists
const client = await mongodb.MongoClient.connect(url);
const db = client.db("poc");
const questionCollection = await db.createCollection("question");
const answerCollection = await db.createCollection("answer");
await questionCollection.insertMany(data.questions);
await answerCollection.insertMany(data.answers);
} catch (e) {
console.log(e);
}
}

mongoSeeder();

这是我的 Dockerfile播种数据库看起来像
FROM node:10

WORKDIR /usr/src/app
COPY package*.json ./
COPY mongo-seeding mongo-seeding
RUN yarn add mongodb uuid faker

CMD ["yarn", "seed"]

这是另一个 Dockerfile 的样子
FROM node:10

WORKDIR /usr/src/app
COPY package*.json ./
RUN yarn install
RUN yarn add mongodb uuid faker
RUN yarn global add nodemon babel-cli babel-preset-env
COPY . .
EXPOSE 3000
CMD ["yarn", "dev-deploy"]

这是我的 docker-compose.yml好像
version: "3"
services:
mongo:
container_name: mongo
image: mongo
ports:
- "4040:27017"
expose:
- "4040"
app:
container_name: ingovguru
build: .
ports:
- "3000:3000"
depends_on:
- mongo
links:
- mongo
expose:
- "3000"
seed:
container_name: seed
build:
context: .
dockerfile: ./mongo-seeding/Dockerfile
links:
- mongo
depends_on:
- mongo
- app

最初,我在数据库中植入 1000 个问题和 200 个答案。

请注意,我没有使用任何卷,因此不应保留任何内容。

我跑

docker-compose 构建
docker 组成

我跳入 mongo 容器,我看到我有 1000 个问题和 100 个答案。

然后我 Ctrl-C并重新运行。

我现在有 2000 个问题和 100 个答案。

为什么会发生这种情况?

最佳答案

即使您没有声明任何卷,mongo 镜像本身也会为容器中的 /data/db/data/configdb 声明卷,这些卷涵盖了数据库数据(请参阅 Dockerfile#L87 )。使用 Docker Compose,这些匿名卷在 docker-compose updocker-compose down 的调用之间重复使用。

要在关闭堆栈时删除卷,您需要使用 -v, --volumes 选项。这将删除卷,为您提供一个干净的数据库。

docker-compose down --volumes

docker-compose down documentation
-v, --volumes           Remove named volumes declared in the `volumes`
section of the Compose file and anonymous volumes
attached to containers.

关于mongodb - 为什么数据会保留在 mongo docker 容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52507458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com