![](/img/trans.png)
[英]docker-compose : Scaling containers with distinct host volume map
[英]How to map a docker containers directory to the host with docker-compose?
鑒於以下 docker-compose.yml 設置:
version: '3.7'
services:
reverse:
container_name: nginx-reverse-proxy
hostname: nginx-reverse-proxy
image: nginx:stable
ports:
- 80:80
- 433:433
volumes:
- type: bind
source: ./config
target: /etc/nginx
consistency: consistent
這導致./config
文件夾被映射到容器nginx-reverse-proxy
,因此在容器內的空/etc/nginx
目錄中。
目標:
將文件夾從容器映射到主機。 在我的示例中,從容器/etc/nginx
到主機./config
。
我當前的搜索不斷導致將目錄從主機映射到容器(我不想要)。
任何提示/解決方案表示贊賞。 謝謝!
我目前的解決方案很難看:我用 docker 創建了容器並將文件從/etc/nginx
復制到./config
。 刪除容器並使用docker-compose up
工作並且nginx
啟動,因為所需的文件已經在主機上。
編輯:該文件夾在創建時不存在。 Docker compose 正在創建文檔中所述的文件夾。
閱讀自: Dockers 卷頁
與綁定安裝相比,卷有幾個優點:
新卷的內容可以由容器預先填充。
所以一個簡單的 docker-compose(在一個名為 nginx 的文件夾中):
version: "3.7"
volumes:
xmpl:
services:
testnginx:
image: nginx:stable
volumes:
- xmpl:/etc/nginx
將通過以下方式生成主機系統上的所有文件:
$ docker-compose up
$ docker inspect nginx_xmpl
...
"Mountpoint": "/var/lib/docker/volumes/nginx_xmpl/_data"
然后您可以查看主機上的文件:
# ls /var/lib/docker/volumes/nginx_xmpl/_data
conf.d fastcgi_params koi-utf koi-win
mime.types modules nginx.conf scgi_params
uwsgi_params win-utf
最后從./config使用它:
# ln -s /var/lib/docker/volumes/nginx_xmpl/_data ./config
# ls config
conf.d fastcgi_params koi-utf koi-win
mime.types modules nginx.conf scgi_params
uwsgi_params win-utf
通常,這是不可能的,因為容器只是“可運行的映像”,並且像 fs 中的一批 zip 文件一樣存儲。 在運行事件中,它們被壓縮到一個“文件夾”中,Linux 核心在其中執行chroot
並使用此根啟動進程。
可選地,您可以在流程結束時將一些從主機操作系統的路徑映射到chrooted folder
中的一些路徑,但不能返回。 當 Docker 進行映射時,它會完全replaces
路徑,因此路徑中的所有現有文件將從映像 fs 中“隱藏”並被映射的主機路徑“替換”。
我認為您想查看圖像中路徑的“默認文件配置”。 從我的角度來看,有兩種方法:
/export
映射到主機的./exported-configs
並在容器啟動時使用docker exec {.... extra params and docker ps id} bash
進入正在運行的容器並運行類似cp -R /etc/nginx /export/nginx-configs
。兩種方法都有效,通常,如果我需要圖像中的任何文件夾,我會使用第一種方法。
祝你好運!
好吧,您不應該按照自己的方式進行映射,因為正如您所說,這很丑陋。 最方便和輕松的方法是這樣的:
version: '3.7'
services:
reverse:
container_name: nginx-reverse-proxy
hostname: nginx-reverse-proxy
image: nginx:stable
ports:
- 80:80
- 433:433
volumes:
- ./nginx-conf/myapp/nginx.conf:/etc/nginx/nginx.conf
- ./nginx-conf/myapp/sites-enabled:/etc/nginx/sites-enabled
volumes:
nginx-conf:
networks:
myapp-net:
driver: bridge
位置/etc/nginx還包含其他文件(例如 mime.types 和 fastcgi_params),如果您映射主機目錄./config ,這些文件將不存在,當然,除非您將它們復制到主機,但這不是漂亮的解決方案。
上面,我只是將位於 /nginx/myapp 文件夾中的本地 nginx.conf 文件映射到 /etx/nginx/nginx.conf 並將本地啟用站點的文件夾映射到容器中的 /etc/nginx/sites-enabled 文件夾。
盡可能讓事情變得簡單會更好,因為 docker 本質上已經很復雜了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.