簡體   English   中英

如何使用docker鏡像和docker-compose保留mongo db的默認數據和運行應用程序數據

[英]How to persist default data and running app data of mongo db with docker images and docker-compose

我必須使用一些默認集合和數據創建一個mongo圖像。 我可以通過以下鏈接創建帶有此數據的mongo圖像:-

如何使用默認集合和數據創建Mongo Docker映像?

因此,當我運行容器時,會得到默認數據。 現在,當我使用該應用程序時,會生成更多數據(通過調用API),這些數據將再次使用默認數據保存在mongodb中。

現在由於某種原因,如果重新啟動docker容器,不幸的是,所有在運行時創建的數據都消失了,只剩下了默認數據。 雖然我使用卷來保存數據。

那么如何在每次重啟docker時持久化運行時數據和默認數據呢? 我正在使用以下docker文件和docker-compose文件

Dockerfile的:

FROM mongo
####### working isnerting data $##########
# Modify child mongo to use /data/db2 as dbpath (because /data/db wont persist the build)
RUN mkdir -p /data/db2 \
    && echo "dbpath = /data/db2" > /etc/mongodb.conf \
    && chown -R mongodb:mongodb /data/db2
COPY . /data/db2
RUN mongod --fork --logpath /var/log/mongodb.log --dbpath /data/db2 --smallfiles \
    &&  mongo 127.0.0.1:27017/usaa /data/db2/config-mongo.js \
    && mongod --dbpath /data/db2 --shutdown \
    && chown -R mongodb /data/db2
# Make the new dir a VOLUME to persists it 
VOLUME /data/db2
CMD ["mongod", "--config", "/etc/mongodb.conf", "--smallfiles"]

和docker-compose.yml的一部分

services:
  mongo:
    build: ./mongodb
    image: "mongo:1.2"
    container_name: "mongo"
    ports:
     - "27017:27017"
    volumes:
     - ${LOCAL_DIRECTORY}:/data/db2
    networks: 
      - some-network    

原因可能是,通過僅使用.js文件中定義的默認數據來重建docker image的創建/ data / db2目錄。 但不確定。

請更正我做錯的事情,或針對此問題提出新的工作流程。

非常感謝!

因為docker默認是無狀態的。 每次調用docker run它都會重建容器。 如果要保留一些數據,則有兩種通用方法:

  1. 退出容器后不要移除容器。 剛啟動容器時,只需給容器起一個可愛的名字,例如docker run --name jessica mongo ,然后在后續調用中使用docker start jessica

  2. 使用卷來存儲數據並在容器之間共享數據。 在這種情況下,您將使用卷參數啟動容器,例如docker run -v /home/data:/data mongo 另外,您將必須重新配置mongodb以將數據保存在容器內的路徑/data中。 這種方法更容易,可用於在不同容器之間共享數據,以及為首次運行提供默認數據

UPD

使用docker-compose啟動容器時,如果您需要數據在會話之間持久存在,則可以簡單地使用預先創建的外部卷。

首先創建音量,讓我說lovely

docker volume create lovely

然后在docker-compose.yml使用它:

version: '3'
services:
  db1:
    image: whatever
    volumes:
      - lovely:/data
  db2:
    image: whatever
    volumes:
      - lovely:/data
volumes:
  lovely:
    external: true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM