国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

yapi容器化docker部署以及mongodb容器的持久化掛載異常問(wèn)題

這篇具有很好參考價(jià)值的文章主要介紹了yapi容器化docker部署以及mongodb容器的持久化掛載異常問(wèn)題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

概述

通過(guò)docker形式部署yapi,需要準(zhǔn)備一個(gè)mongodb,然后直接在一個(gè)空文件夾里寫(xiě)好Dockerfile,其中通過(guò)wget下載yapi的zip包。

基本按照這篇文章:https://www.modb.pro/db/149666 來(lái)處理即可

1. 準(zhǔn)備mongodb

把mongodb的docker 跑起來(lái), --auth 表示需要密碼才能訪問(wèn)

docker run -d --name mongodb -p 27017:27017 -v /usr/local/mongo_data/db:/data/db -v /usr/local/mongo_data/configdb:/data/configdb mongo:4.2 --auth

注意 原文中啟動(dòng)mongo的容器是這樣的
首先創(chuàng)建MongoDB的數(shù)據(jù)卷
docker volumn create mongo_data
然后啟動(dòng)

docker run -d --name mongo -p 27017:27017 -v mongo_data:/data mongo:4.2 --auth

但是這并不能讓data中的文件持久化到宿主機(jī)上,原因見(jiàn)后節(jié)分析。

這個(gè)mongo:4.2就是鏡像名+tag,也可以直接寫(xiě)mongo,就是拉取最新latest。

然后進(jìn)入mongodb的docker進(jìn)行一些admin的用戶(hù)配置:(以下全部照抄前文所述的文章里的步驟)

docker exec -it <docker-id> mongo admin

創(chuàng)建一個(gè)用戶(hù)admin

db.createUser({user:'admin',pwd:'123456',roles:[{role:'userAdminAnyDatabase',db:'admin'}]});

登陸db

db.auth("admin","123456")

授予root角色

db.grantRolesToUser("admin", [{role:"root",db:"admin"}])

然后mongodb的操作就結(jié)束了,接下來(lái)是準(zhǔn)備部署yapi

Docker部署yapi

現(xiàn)在開(kāi)始打鏡像!找到一個(gè)空文件夾里寫(xiě)一個(gè)Dockerfile即可,如下。

FROM node:12-alpine as builder
WORKDIR /yapi
RUN apk add --no-cache wget make
ENV VERSION=1.12.0
RUN wget https://github.com/YMFE/yapi/archive/refs/tags/v${VERSION}.zip
RUN unzip v${VERSION}.zip && mv yapi-${VERSION} vendors
RUN cd /yapi/vendors && npm install --production --registry https://registry.npm.taobao.org

FROM node:12-alpine
ENV TZ="Asia/Shanghai"
WORKDIR /yapi/vendors
COPY --from=builder /yapi/vendors /yapi/vendors
RUN mv /yapi/vendors/config_example.json /yapi/config.json
EXPOSE 3000
ENTRYPOINT ["node"]

構(gòu)建鏡像

docker build -t harbor.xxx.com/yapi:v1.0 .

推送鏡像(如果僅需在本地跑不需要,建議備份)

docker push harbor.xxx.com/yapi:v1.0

本地準(zhǔn)備好一個(gè)配置文件config.json,待會(huì)兒會(huì)掛載到容器里使用,這樣比打進(jìn)鏡像里來(lái)說(shuō)更靈活一些。

(這個(gè)db的servername最好寫(xiě)成具體的ip,起碼是網(wǎng)絡(luò)里能連接到的,直接寫(xiě)127.0.0.1好像有問(wèn)題)

另外就是mongodb的用戶(hù)名和密碼跟前邊設(shè)定的保持一致。

{
  "port": "3000",
  "adminAccount": "admin@admin.com",
  "timeout":120000,
  "db": {
    "servername": "127.0.0.1",
    "DATABASE": "yapi",
    "port": 27017,
    "user": "admin",
    "pass": "123456",
    "authSource": "admin"
  },
  "mail": {
    "enable": true,
    "host": "abc.com",
    "port": 465,
    "from": "abc@abc.com",
    "auth": {
      "user": "abc@abc.com",
      "pass": "abc"
    }
  }
}

注意在config.json的當(dāng)前文件夾下執(zhí)行(因?yàn)槊罾飼?huì)包括$PWD):

首先初始化

docker run -it --rm \
--entrypoint npm \
--workdir /yapi/vendors \
-v $PWD/config.json:/yapi/config.json \
yapi run install-server

會(huì)看到以下內(nèi)容:

....
初始化管理員賬號(hào)成功,賬號(hào)名:"admin@admin.com",密碼:"ymfe.org"

然后啟動(dòng)yapi,盡量換個(gè)名字,可能yapi這個(gè)名字沖突了

docker run -d --name yapi-server \
--workdir /yapi/vendors \
-p 5000:3000 \
-v $PWD/config.json:/yapi/config.json \
yapi server/app.js

可以看到以下日志輸出

log: -------------------------------------swaggerSyncUtils constructor-----------------------------------------------
log: 服務(wù)已啟動(dòng),請(qǐng)打開(kāi)下面鏈接訪問(wèn):
http://127.0.0.1:3000/
log: mongodb load success...

然后訪問(wèn)3000即可。

持久化mongo數(shù)據(jù)

以下操作不能同步/data/db內(nèi)的文件到宿主機(jī)

掛載卷

-> # docker volume inspect mongo_data
[
    {
        "CreatedAt": "2023-07-25T17:36:05+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/mongo_data/_data",
        "Name": "mongo_data",
        "Options": null,
        "Scope": "local"
    }
]

可以發(fā)現(xiàn)這個(gè)用的宿主機(jī)路徑為/var/lib/docker/volumes/mongo_data/_data

切換到路徑上,可以看到確實(shí)有兩個(gè)跟mongo的/data相同的文件夾

root@cloud-virtual-machine [11:30:46 AM] [/var/lib/docker/volumes/mongo_data/_data]
-> # pwd
/var/lib/docker/volumes/mongo_data/_data
root@cloud-virtual-machine [11:30:47 AM] [/var/lib/docker/volumes/mongo_data/_data]
-> # ls
configdb/  db/

但是進(jìn)入子目錄會(huì)發(fā)現(xiàn)什么都沒(méi)有

root@cloud-virtual-machine [11:30:48 AM] [/var/lib/docker/volumes/mongo_data/_data]
-> # cd db
root@cloud-virtual-machine [11:31:13 AM] [/var/lib/docker/volumes/mongo_data/_data/db]
-> # ls -l
total 0

但是掛載了該卷的容器內(nèi)是有東西的

-> # docker exec -it 97f6c5df69db bash
root@97f6c5df69db:/# cd /data/
root@97f6c5df69db:/data# ls
configdb  db
root@97f6c5df69db:/data# cd db/
root@97f6c5df69db:~# ls
WiredTiger				collection-17--2171366465605763899.wt  collection-76--2171366465605763899.wt  index-107--2171366465605763899.wt  index-3--2171366465605763899.wt   index-50--2171366465605763899.wt  index-69--2171366465605763899.wt  index-91--2171366465605763899.wt
WiredTiger.lock				collection-19--2171366465605763899.wt  collection-77--2171366465605763899.wt  index-12--2171366465605763899.wt	 index-30--2171366465605763899.wt  index-53--2171366465605763899.wt  index-73--2171366465605763899.wt  index-92--2171366465605763899.wt
WiredTiger.turtle			collection-2--2171366465605763899.wt   collection-8--2171366465605763899.wt   index-13--2171366465605763899.wt	 index-31--2171366465605763899.wt  index-54--2171366465605763899.wt  index-75--2171366465605763899.wt  index-93--2171366465605763899.wt
WiredTiger.wt				collection-4--2171366465605763899.wt   collection-88--2171366465605763899.wt  index-15--2171366465605763899.wt	 index-33--2171366465605763899.wt  index-55--2171366465605763899.wt  index-78--2171366465605763899.wt  index-96--2171366465605763899.wt
WiredTigerLAS.wt			collection-45--2171366465605763899.wt  diagnostic.data			      index-20--2171366465605763899.wt	 index-36--2171366465605763899.wt  index-56--2171366465605763899.wt  index-79--2171366465605763899.wt  index-97--2171366465605763899.wt
_mdb_catalog.wt				collection-46--2171366465605763899.wt  index-1--2171366465605763899.wt	      index-21--2171366465605763899.wt	 index-38--2171366465605763899.wt  index-59--2171366465605763899.wt  index-80--2171366465605763899.wt  journal
collection-0--2171366465605763899.wt	collection-49--2171366465605763899.wt  index-10--2171366465605763899.wt       index-22--2171366465605763899.wt	 index-40--2171366465605763899.wt  index-6--2171366465605763899.wt   index-82--2171366465605763899.wt  mongod.lock
collection-100--2171366465605763899.wt	collection-51--2171366465605763899.wt  index-101--2171366465605763899.wt      index-23--2171366465605763899.wt	 index-42--2171366465605763899.wt  index-60--2171366465605763899.wt  index-84--2171366465605763899.wt  sizeStorer.wt
collection-103--2171366465605763899.wt	collection-52--2171366465605763899.wt  index-102--2171366465605763899.wt      index-25--2171366465605763899.wt	 index-47--2171366465605763899.wt  index-63--2171366465605763899.wt  index-85--2171366465605763899.wt  storage.bson
collection-11--2171366465605763899.wt	collection-72--2171366465605763899.wt  index-105--2171366465605763899.wt      index-26--2171366465605763899.wt	 index-48--2171366465605763899.wt  index-64--2171366465605763899.wt  index-86--2171366465605763899.wt
collection-16--2171366465605763899.wt	collection-74--2171366465605763899.wt  index-106--2171366465605763899.wt      index-29--2171366465605763899.wt	 index-5--2171366465605763899.wt   index-68--2171366465605763899.wt  index-9--2171366465605763899.wt

也就是說(shuō),掛載卷與對(duì)應(yīng)容器路徑內(nèi)的文件并不同步。

問(wèn)題分析與解決

考慮兩個(gè)方向,一是權(quán)限問(wèn)題,無(wú)法寫(xiě)入,而是掛載點(diǎn)沖突,導(dǎo)致掛載configdb和db之后,宿主機(jī)目錄和docker內(nèi)的目錄其實(shí)是兩個(gè)不相干的環(huán)境。

  1. 考慮是否是權(quán)限問(wèn)題?
root@cloud-virtual-machine [11:38:24 AM] [/var/lib/docker/volumes/mongo_data]
-> # ls -l
total 4.0K
drwxr-xr-x 4 root root 4.0K 2023-08-01 11:14 _data/

但是docker容器是root啟動(dòng)的啊。

  1. 考慮掛載點(diǎn)沖突問(wèn)題

找到了一個(gè)非常類(lèi)似的問(wèn)題:https://forums.balena.io/t/container-volume-can-not-in-sync-with-host-os-volume/17339

根據(jù)這個(gè)問(wèn)題中的解決思路,去dockerhub查找一下mongo4.2的Dockerfile:

https://hub.docker.com/layers/arm64v8/mongo/4.2.6/images/sha256-25821e16c7c401986caa09fba3be08b103203a1599edaba8cd34366903b4b3e6?context=explore

可以看到其中有一層是這個(gè)掛載:

VOLUME [/data/db /data/configdb]

跟回答問(wèn)題的老哥說(shuō)的比較相符:

it seems like you define /data/db and /data/configdb as volumes (https://github.com/andresvidal/rpi3-mongodb3/blob/master/Dockerfile#L28 11). This means that docker will create a new volume on run that holds the data that was specified in the Dockerfile (https://docs.docker.com/engine/reference/#volume 5). So the resin-data volume is mounted at /data and there are two new mount points at /data/db and /data/configdb.

也就是說(shuō),在Dockerfile中,已經(jīng)指定了/data/db和/data/configdb作為卷(volume),docker在運(yùn)行容器的時(shí)候會(huì)為此創(chuàng)建一個(gè)新的卷,用于存儲(chǔ)這兩個(gè)目錄,因此我們?cè)O(shè)定的mongo_data卷會(huì)被掛載到data,而其下的db和configdb是兩個(gè)與此有別的掛載點(diǎn)。

表現(xiàn)為mongo_data中只包含/data下的configdb和db文件夾,而這兩個(gè)文件夾中的內(nèi)容已經(jīng)被掛載到了另外的卷上,所以并不會(huì)同步到mongo_data中。

綜上所述,如果要掛載到本地的話,就直接指定/data/db和/data/configdb,不要指定/data。

查看原mongo容器的掛載點(diǎn):

 "Mounts": [
            {
                "Type": "volume",
                "Name": "mongo_data",
                "Source": "/var/lib/docker/volumes/mongo_data/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "438a9fc537cfcf0848c57ef695a48212660c204738ebfd9dd9f2b5c30b1880a6",
                "Source": "/var/lib/docker/volumes/438a9fc537cfcf0848c57ef695a48212660c204738ebfd9dd9f2b5c30b1880a6/_data",
                "Destination": "/data/configdb",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "1204f82b87721509bfb996e36b0d0ab6e9cd1a37fe81ec78284fa50c6f369f43",
                "Source": "/var/lib/docker/volumes/1204f82b87721509bfb996e36b0d0ab6e9cd1a37fe81ec78284fa50c6f369f43/_data",
                "Destination": "/data/db",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

可以驗(yàn)證除了mongo_data外還分別掛載了/db和/configdb到兩個(gè)其他的地方。

mongodb操作

mongodb數(shù)據(jù)備份 注意要指定–authenticationDatabase,否則默認(rèn)的是什么SHA256的方式,會(huì)報(bào)錯(cuò)。

mongodump --username admin --password mypassword --authenticationDatabase admin --db mydatabase --out ./backup

mongo備份還原文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-623385.html

mongorestore -u admin --password 123456 --authenticationDatabase admin --db yapi /backup1053/yapi

到了這里,關(guān)于yapi容器化docker部署以及mongodb容器的持久化掛載異常問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【云原生】第八篇--Docker容器數(shù)據(jù)持久化存儲(chǔ)機(jī)制

    物理機(jī)或虛擬機(jī)數(shù)據(jù)持久化存儲(chǔ) 由于物理機(jī)或虛擬機(jī)本身就擁有大容量的磁盤(pán),所以可以直接

    2023年04月09日
    瀏覽(22)
  • Docker安裝mysql&&使用Navicat遠(yuǎn)程連接mysql容器&&mysql容器的持久化測(cè)試

    Docker安裝mysql&&使用Navicat遠(yuǎn)程連接mysql容器&&mysql容器的持久化測(cè)試

    文章主人公:帥哥BUG??? 文章路人: 路人???? 路人??? 目錄 一.安裝mysql并配置文件 1.下載相關(guān)鏡像 2.在宿主機(jī)中創(chuàng)建相關(guān)目錄,用于掛載容器的相關(guān)數(shù)據(jù) 3.conf目錄 4.data目錄(創(chuàng)建mysql5.7容器) 二.使用Navicat遠(yuǎn)程連接mysql容器 1.ip addr 獲取ip 2.點(diǎn)擊連接選擇MySql 3.輸入ip,密碼

    2024年02月03日
    瀏覽(20)
  • 【Docker】Docker 部署 Mysql 并設(shè)置數(shù)據(jù)持久化

    我們使用Docker的目的就是圖它方便下載部署,不用常規(guī)的經(jīng)歷下載、配置、安裝等等繁瑣的步驟。但是與此同時(shí)Docker也存在一些缺點(diǎn),像刪除容器后數(shù)據(jù)就都沒(méi)有了。很顯然,不能持久化對(duì)于需要數(shù)據(jù)持久化的MySQL數(shù)據(jù)庫(kù)來(lái)說(shuō)是不能接受的,那有沒(méi)有方式可以解決。 有,通過(guò)

    2024年02月10日
    瀏覽(22)
  • docker (六)-進(jìn)階篇-數(shù)據(jù)持久化最佳實(shí)踐MySQL部署

    docker (六)-進(jìn)階篇-數(shù)據(jù)持久化最佳實(shí)踐MySQL部署

    容器的數(shù)據(jù)掛載通常指的是將宿主機(jī)(虛擬機(jī)或物理機(jī))上的目錄或文件掛載到容器內(nèi)部 詳情參考docker官網(wǎng)文檔 查詢(xún)官網(wǎng),MySQL必須要設(shè)置超級(jí)用戶(hù)密碼的環(huán)境變量 說(shuō)明:上面的 -v 用于將項(xiàng)目數(shù)據(jù)目錄、日志目錄、配置文件目錄映射到宿主機(jī), --restart=always 表示重啟? doc

    2024年02月20日
    瀏覽(18)
  • 小白到運(yùn)維工程師自學(xué)之路 第六十二集 (docker持久化與數(shù)據(jù)卷容器)

    小白到運(yùn)維工程師自學(xué)之路 第六十二集 (docker持久化與數(shù)據(jù)卷容器)

    一、概述 Docker持久化是指將容器中的數(shù)據(jù)持久保存在主機(jī)上,以便在容器重新啟動(dòng)或遷移時(shí)不丟失數(shù)據(jù)。由于Docker容器是臨時(shí)和可變的,它們的文件系統(tǒng)默認(rèn)是易失的,這意味著容器中的任何更改或創(chuàng)建的文件都只存在于此容器的生命周期內(nèi)。但是,在許多場(chǎng)景中,我們希望

    2024年02月14日
    瀏覽(16)
  • docker nfs文件系統(tǒng)持久化,swarm部署NGINX使用nfs示例

    1.1 說(shuō)明 1.2 檢查 nfsd 模塊是否已經(jīng)被加載 nfsd 是NFS服務(wù)器的內(nèi)核模塊 1.3 docker-compose文件 1.4 啟動(dòng)容器 3.1 部署service 4.1 查看全部service信息 4.2 查看指定service下容器運(yùn)行情況 4.3 調(diào)整service下容器個(gè)數(shù) 4.4 查看service配置信息 – 格式化輸出(便于查看) 4.5 強(qiáng)制重新部署 nginx_nginx-we

    2024年02月03日
    瀏覽(21)
  • node中的數(shù)據(jù)持久化之mongoDB

    node中的數(shù)據(jù)持久化之mongoDB

    MongoDB 是一種 開(kāi)源的非關(guān)系型數(shù)據(jù)庫(kù) ,正如它的名字所表示的, MongoDB 支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是一種以 bson 格式(一種 json 的存儲(chǔ)形式)的 文檔存儲(chǔ)方式 為主,支持的數(shù)據(jù)結(jié)構(gòu)類(lèi)型更加豐富的 NoSQL 數(shù)據(jù)庫(kù)。它是一種 介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn) 品,是非關(guān)

    2024年02月13日
    瀏覽(16)
  • Redis 持久化-RDB和 持久化-AOF 的詳細(xì)介紹以及區(qū)別

    Redis 持久化-RDB和 持久化-AOF 的詳細(xì)介紹以及區(qū)別

    在線文檔: https://redis.io/topics/persistence RDB(Redis DataBase) AOF(Append Of File) 在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫(xiě)入磁盤(pán), 也就Snapshot 快照,恢復(fù)時(shí)將快照文件讀到內(nèi)存 RDB 及其執(zhí)行流程 對(duì)上圖的解讀 具體流程如下: redis 客戶(hù)端執(zhí)行bgsave 命令或者自動(dòng)觸發(fā)bgsave 命令;

    2024年02月09日
    瀏覽(32)
  • Docker 持久化

    Docker 持久化

    為了能夠保存(持久化)數(shù)據(jù)以及共享容器間的數(shù)據(jù), Docker 提出了 Volume 的概念。簡(jiǎn)單來(lái)說(shuō), Volume 就是目錄或者文件,它可以 繞過(guò) 默認(rèn)的聯(lián)合文件系統(tǒng),而以正常的文件或者目錄的形式存在于宿主機(jī)上。 數(shù)據(jù)卷方式: 數(shù)據(jù)卷是一個(gè)特殊的文件或者目錄,它將宿主機(jī)文件或

    2024年02月03日
    瀏覽(22)
  • Docker數(shù)據(jù)持久化

    Docker數(shù)據(jù)持久化

    在容器層的 UnionFS(聯(lián)合文件系統(tǒng))中對(duì)文件/目錄的任何修改,無(wú)論是手工修改還是 容器在運(yùn)行過(guò)程中的修改,在該容器丟失或被刪除后這些修改將全部丟失。即這些修改是無(wú) 法保存下來(lái)的。若要保存下來(lái)這些修改,通常有兩種方式: 定制鏡像持久化:將這個(gè)修改過(guò)的容器

    2024年01月23日
    瀏覽(29)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包