我創建了一個程式并進行了測驗,效果很好。我決定對它進行 docker 化,似乎可能在幾個小時或幾天后,mongoDB 容器的資料都被洗掉了。docker-compose.yml 檔案:
version: '3'
services:
node:
restart: always
build: ./nodeServer
container_name: nodeserver
ports:
- 5000:5000
depends_on:
- database
networks:
twitter_articles:
ipv4_address: 172.24.0.2
environment:
- TZ=Europe/Athens
database:
restart: always
build: ./mongoDump/database
container_name: mongodb
ports:
- 27017:27017
networks:
twitter_articles:
ipv4_address: 172.24.0.4
volumes:
- ./data:/data/db
environment:
- TZ=Europe/Athens
pythonscript:
restart: always
build: ./python
container_name: pythonscript
depends_on:
- database
networks:
twitter_articles:
ipv4_address: 172.24.0.3
environment:
- TZ=Europe/Athens
networks:
twitter_articles:
ipam:
config:
- subnet: 172.24.0.0/24
以及它們構建的三個 Dockerfile:
節點服務器:
FROM node:14.16.1
COPY package*.json ./
RUN npm install
COPY . ./
CMD [ "npm", "start"]
蒙哥達:
FROM mongo:5.0.3
CMD docker-entrypoint.sh mongod
腳本
FROM python:3.9
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY . ./
CMD [ "python", "-u", "./init2.py" ]
如前所述,如果沒有 Docker,該應用程式可以正常作業,并且不會出現那種資料庫被清除的行為。我也嘗試過內部 Docker 存盤,它也做同樣的事情。我試圖檢查日志,發現每次資料庫清除時pythonscript容器中都會發生錯誤。我知道 pythonscript 中應該會發生錯誤,但是應用程式中的任何地方都沒有這樣的代碼來執行集合或資料庫的洗掉(同樣沒有 Docker,這個錯誤仍然會發生,但沒有被洗掉)。
有任何想法嗎?
uj5u.com熱心網友回復:
您可以創建一個外部卷并將芒果的資料添加到其中,即使您關閉 docker-compose,您的資料也不會擦除
version: '3'
services:
node:
restart: always
build: ./nodeServer
container_name: nodeserver
ports:
- 5000:5000
depends_on:
- database
networks:
twitter_articles:
ipv4_address: 172.24.0.2
environment:
- TZ=Europe/Athens
database:
restart: always
build: ./mongoDump/database
container_name: mongodb
ports:
- 27017:27017
networks:
twitter_articles:
ipv4_address: 172.24.0.4
volumes:
- mongo_data:/data/db
environment:
- TZ=Europe/Athens
pythonscript:
restart: always
build: ./python
container_name: pythonscript
depends_on:
- database
networks:
twitter_articles:
ipv4_address: 172.24.0.3
environment:
- TZ=Europe/Athens
networks:
twitter_articles:
ipam:
config:
- subnet: 172.24.0.0/24
volumes:
mongo_data:
external: true
現在您必須使用在您的 docker 中創建一個卷
docker volume create --name=mongo_data
然后 docker-compose down 和
docker-compose up --build -d
uj5u.com熱心網友回復:
有人建議我將資料保存在 docker 容器之外的單獨卷中總是更好的主意。查找本教程卷。
uj5u.com熱心網友回復:
您需要為資料庫創建一個持久卷,因為正如您在 docker-compose.yml 檔案中所述,您得到:
restart: always
所以每次你的python腳本出錯時,它都會停止并且依賴于Mariadb,所以它會重新啟動并且資料被擦除。
uj5u.com熱心網友回復:
確保資料存盤在 docker 容器之外,因為它們被視為牛而不是寵物。新容器是全新創建的,沒有來自先前版本的資料。
uj5u.com熱心網友回復:
- 我會確保容器用戶具有預配置的 ID,該 ID 具有對用于資料庫資料持久性的主機檔案夾的寫訪問權限。
- 在 Docker 中映射持久資料檔案夾時,我也會在主機端使用絕對路徑。
參考:
volumes:
- ./data:/data/db
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/446208.html
標籤:mongodb 码头工人 调试 码头工人撰写 dockerfile
上一篇:錯誤:將pandas更新到1.4.0后“Spyder無法檢索此變數的值”,如何解決?
下一篇:樹遍歷導致串列
