日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker 三种挂载文件路径方式

發布時間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker 三种挂载文件路径方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為何要為容器進行文件掛載

為了持久化docker容器產生的數據(數據文件/配置文件/日志文件), 通常會掛載(映射)產生數據的容器內路徑到主機路徑上.

用處:

  • 不用進入容器內就能訪問配置容器內數據
  • 刪除容器時能保留數據
  • 3種掛載方式

  • 指定路徑掛載
  • 具名掛載
  • 匿名掛載
  • 1.指定路徑掛載

    首先查看當前的數據卷和容器列表
    當前只有1個運行中的容器和1個數據卷(volume)

    [gateman@i-93f6y1io docker]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5b82adf8f3f5 mysql:latest "docker-entrypoint.s…" 7 days ago Exited (0) 7 days ago mysql01 5d1736f42fd3 portainer/portainer "/portainer" 13 days ago Up 12 days 0.0.0.0:3346->9000/tcp condescending_cartwright [gateman@i-93f6y1io docker]$ [gateman@i-93f6y1io docker]$ docker volume ls DRIVER VOLUME NAME local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261 [gateman@i-93f6y1io docker]$

    語法:

    -v /主機路徑:/容器內路徑

    例子 我們創建1個tomcat容器

    docker run -d -p 3348:8080 -v /home/gateman/docker/webapps:/usr/local/tomcat/webapps --name tomcat_spe_mount tomcat

    [gateman@i-93f6y1io docker]$ pwd /home/gateman/docker [gateman@i-93f6y1io docker]$ mkdir -p webapps [gateman@i-93f6y1io docker]$ ls run_portainer.sh scripts webapps [gateman@i-93f6y1io docker]$ docker run -d -p 3348:8080 -v /home/gateman/docker/webapps:/usr/local/tomcat/webapps --name tomcat_spe_mount tomcat 052e6104aeaf65f56e53535d249d5417701560ce6332dbcc764dfb4cc6435bae [gateman@i-93f6y1io docker]$

    這是我們訪問 tomcat主頁,見到tomcat啟動了, 但是什么也沒有, 因為容器內的webapps是空的
    通過查看容器信息, 我們可以看到一條掛載記錄

    [gateman@i-93f6y1io docker]$ docker inspect --format="{{.Mounts}}" tomcat_spe_mount [{bind /home/gateman/docker/webapps /usr/local/tomcat/webapps true rprivate}] [gateman@i-93f6y1io docker]$

    這時我們把一些東西webapps初始的管理項目copy 到掛載點 /home/gateman/docker/webapps 上
    然后刷新tomcat主頁, 能正常顯示了

    [gateman@i-93f6y1io docker]$ cp -a ~/docker/scripts/mount/webapps/* /home/gateman/docker/webapps/ [gateman@i-93f6y1io docker]$ docker exec -it tomcat_spe_mount /bin/bash root@052e6104aeaf:/usr/local/tomcat# ls /usr/local/tomcat/webapps ROOT docs examples host-manager manager root@052e6104aeaf:/usr/local/tomcat# exit exit [gateman@i-93f6y1io docker]$


    證明了掛載點有效的.

    我們再查看下數據卷列表

    [gateman@i-93f6y1io docker]$ docker volume ls DRIVER VOLUME NAME local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261 [gateman@i-93f6y1io docker]$

    數據卷并沒有增加
    說明 指定路徑掛載并不會創建數據卷(volume)

    2.具名掛載

    可以講具名掛載和匿名掛載都不用指定主機的掛載路徑, 由docker自己管理(通常在/var/lib/docker/volumn/ 下), 只需要指定容器里需要映射出來的路徑。 而且會增加1個數據卷。

    具名就是會給這個新增的數據卷添加1個名字。
    匿名就是給這個數據卷產生1個隨機token作為數據卷名字

    語法

    -v 數據卷名:/容器內路徑

    例子

    我們創建多個tomcat 容器

    [gateman@i-93f6y1io docker]$ docker run -d -p 3349:8080 -v vol_has_name_tomcat:/usr/local/tomcat/webapps --name tomcat_has_name_mount tomcat d0bc64be6bdc9aedaec4bf22777eeea8a47106df90e05c929e31f540541f79df [gateman@i-93f6y1io docker]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d0bc64be6bdc tomcat "catalina.sh run" 5 seconds ago Up 4 seconds 0.0.0.0:3349->8080/tcp tomcat_has_name_mount 052e6104aeaf tomcat "catalina.sh run" 15 minutes ago Up 15 minutes 0.0.0.0:3348->8080/tcp tomcat_spe_mount 5d1736f42fd3 portainer/portainer "/portainer" 13 days ago Up 13 days 0.0.0.0:3346->9000/tcp condescending_cartwright [gateman@i-93f6y1io docker]$ docker exec -it tomcat_has_name_mount /bin/bash root@d0bc64be6bdc:/usr/local/tomcat# ls /usr/local/tomcat/webapps root@d0bc64be6bdc:/usr/local/tomcat# exit exit

    可以見到1個新創建的容器。 這時訪問這個tomcat, 也是沒有主頁的, 因為容器內webapps是空的

    這時我們查看下這個容器的掛載信息

    [gateman@i-93f6y1io docker]$ docker inspect --format="{{.Mounts}}" tomcat_has_name_mount [{volume vol_has_name_tomcat /var/lib/docker/volumes/vol_has_name_tomcat/_data /usr/local/tomcat/webapps local z true }] [gateman@i-93f6y1io docker]$

    可以很清晰見到, 1個volume被指定了, 名字就是我們命令中定義的。
    掛載點是/var/lib/docker/volumes/vol_has_name_tomcat/_data

    我們再查看下數據卷列表

    [gateman@i-93f6y1io docker]$ docker volume ls DRIVER VOLUME NAME local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261 local vol_has_name_tomcat [gateman@i-93f6y1io docker]$

    1個新的數據卷被創建

    我們把一些default東西copy到掛載點(要加sodu), 主頁就出來了

    [gateman@i-93f6y1io docker]$ sudo cp -a ~/docker/scripts/mount/webapps/* /var/lib/docker/volumes/vol_has_name_tomcat/_data/ [sudo] gateman 的密碼: [gateman@i-93f6y1io docker]$ docker exec -it tomcat_has_name_mount /bin/bash root@d0bc64be6bdc:/usr/local/tomcat# ls /usr/local/tomcat/webapps ROOT docs examples host-manager manager root@d0bc64be6bdc:/usr/local/tomcat#

    3.匿名掛載

    語法

    -v /容器內路徑

    不用指定數據卷名

    例子
    [gateman@i-93f6y1io docker]$ docker run -d -p 3350:8080 -v /usr/local/tomcat/webapps --name tomcat_ano_mount tomcat 132f575e0345ef5808e250c3b18741b294d4bb3e61a1ac88d8b6a9b4d2a76a79 [gateman@i-93f6y1io docker]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 132f575e0345 tomcat "catalina.sh run" 3 seconds ago Up 3 seconds 0.0.0.0:3350->8080/tcp tomcat_ano_mount d0bc64be6bdc tomcat "catalina.sh run" 38 minutes ago Up 38 minutes 0.0.0.0:3349->8080/tcp tomcat_has_name_mount 052e6104aeaf tomcat "catalina.sh run" 53 minutes ago Up 53 minutes 0.0.0.0:3348->8080/tcp tomcat_spe_mount 5d1736f42fd3 portainer/portainer "/portainer" 13 days ago Up 13 days 0.0.0.0:3346->9000/tcp condescending_cartwright [gateman@i-93f6y1io docker]$ docker volume ls DRIVER VOLUME NAME local 5889eed1cc2a05c3f54d69db7c95178b14a3821b6b02a341f3ac717d63ea2beb local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261 local vol_has_name_tomcat [gateman@i-93f6y1io docker]$ docker inspect --format="{{.Mounts}}" tomcat_ano_mount [{volume 5889eed1cc2a05c3f54d69db7c95178b14a3821b6b02a341f3ac717d63ea2beb /var/lib/docker/volumes/5889eed1cc2a05c3f54d69db7c95178b14a3821b6b02a341f3ac717d63ea2beb/_data /usr/local/tomcat/webapps local true }] [gateman@i-93f6y1io docker]$

    可以見到 1個新的volume 被創建, 而且名字是一堆無意義的字符

    掛載點同樣也是很冗長,

    所以一般情況不建議用匿名掛載

    總結

    以上是生活随笔為你收集整理的docker 三种挂载文件路径方式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。