根据我的理解,新容器在死后不应该保留数据。
现在我有两个 Dockerfile。一个用于我的应用程序,另一个用于为数据库做种子。
这是我的项目结构
/
package.json
Dockerfile
docker-compose.yml
mongo-seeding/
Dockerfile
seedDatabase.mjs
Run Code Online (Sandbox Code Playgroud)
这是我的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();
Run Code Online (Sandbox Code Playgroud)
这就是我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"]
Run Code Online (Sandbox Code Playgroud)
这是另一个 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"]
Run Code Online (Sandbox Code Playgroud)
这是我的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
Run Code Online (Sandbox Code Playgroud)
最初,我为数据库设置了 1000 个问题和 200 个答案。
请注意,我没有使用任何卷,因此不应保留任何内容。
我跑
docker-compose 构建 docker-compose up
我跳入 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
Run Code Online (Sandbox Code Playgroud)
-v, --volumes Remove named volumes declared in the `volumes`
section of the Compose file and anonymous volumes
attached to containers.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2003 次 |
| 最近记录: |