据我了解,新容器在死亡后不应保留数据。
现在我有两个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 up
和docker-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.