經過測試,使用docker的目錄掛載,有以下規則,以nginx容器做測試
規則
1、若宿主機和默認容器都不存在目錄,則會創建所寫的對應目錄
命令:docker run --name mynginx5 -p 101:80 -v /data/nginx:/etc/nginx1 -d nginx:latest
容器:
宿主機:
2、若宿主機存在目錄,且里面有文件,而容器沒有目錄,則會將宿主機的目錄同步映射到容器
命令:docker run --name mynginx5 -p 101:80 -v /data/nginx:/etc/nginx1 -d nginx:latest
容器:
宿主機:
3、若容器有目錄,且有文件,宿主機有目錄,沒有文件。 會將目錄覆蓋,以宿主目錄為主,掛載后的容器目錄為空。因為宿主機的目錄為空
命令:docker run --name mynginx777 -p 100:80 -v /data/nginx/html:/usr/share/nginx/html -d nginx:latest
正常容器的目錄下有頁面:
但是目錄被宿主機覆蓋:
宿主機:
可以運行成功:
訪問頁面:
總結
docker的容器掛載機制,總的來說就是,沒有目錄就創建,以宿主機的文件目錄為主,直接覆蓋容器的目錄(就是將目錄復制到容器,包括目錄所有文件)
注意事項
在進行容器目錄掛載的時候,若要設置配置文件的掛載,只需要掛載相對應的配置文件,且宿主機的配置文件需要有默認值;
在容器啟動時,會使用掛載的配置文件進行初始化,若文件找不到或為空,會導致啟動失敗。若掛載整個配置文件的目錄,會將容器默認的配置文件夾覆蓋
從而導致啟動失敗,因此只需要將要修改的配置文件進行掛載映射即可。