簡體   English   中英

如何使用 docker-compose 將 docker 容器目錄映射到主機?

[英]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
  • 使用https://docs.docker.com/engine/reference/commandline/export/導出整個圖像文件系統,並查看有趣的圖像配置等等。

兩種方法都有效,通常,如果我需要圖像中的任何文件夾,我會使用第一種方法。

祝你好運!

好吧,您不應該按照自己的方式進行映射,因為正如您所說,這很丑陋。 最方便和輕松的方法是這樣的:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM