簡體   English   中英

無法在Docker中掛載卷

[英]Cannot mount volume in docker

我正在嘗試使用docker-compose在Docker容器的根級別將本地目錄掛載到新目錄。 據說這很簡單。

這是我的docker-compose文件的樣子:

version: '2'
services:
  web:
    build: ./docker/web/
    expose:
      - 80
    volumes:
      - .:/contracts

從字面上看,docker / web中的Dockerfile看起來像這樣(我打算以后再做):

FROM php:5.6-apache
RUN /contracts/provision/web.sh

但是我不斷收到找不到web.sh的錯誤。 在我的Dockerfile中放置各種ls命令之類的命令,表明沒有在容器上創建名為“ contracts”的目錄。 如果我嘗試直接使用像mnt這樣的現有目錄,則會得到相同的結果-目錄仍然為空。

但是docker inspect顯示它顯然已安裝!

"Mounts": [
    {
        "Type": "bind",
        "Source": "/vagrant",
        "Destination": "/contracts",
        "Mode": "rw",
        "RW": true,
        "Propagation": ""
    }
],

我在運行Ubuntu 14.04的無聊的盒子上運行docker-compose。

任何幫助將不勝感激,我已經束手無策了。 謝謝!

將卷附加到容器,從映像創建容器,並從build命令創建映像。 運行構建時,該卷掛載將不存在,因此在RUN命令期間不會看到它。

在構建時,您無需COPY卷,而可以將該目錄COPYADD到映像中。 您將在RUN命令之前在Dockerfile中包含以下內容:

COPY . /contracts

請注意,如果執行此操作並在運行時在同一位置上安裝卷,則將隱藏該位置映像中存在的任何內容。 因此,將需要成為映像一部分的命令和腳本與需要成為持久卷一部分的數據分開,然后僅將構建時間腳本復制到映像中。

使用正在運行的容器,您可以嘗試使用docker exec -it $container_id ls /contracts來查看它是否按預期存在。

如果目錄存在但為空,則最可能的原因是如果您在虛擬機或遠程主機上安裝了docker,並且正在其他環境中運行命令。 該文件夾需要存在於Docker主機(VM)本身上才能安裝到容器中。 Docker for Win和Docker for Mac具有將特定的文件夾或驅動器共享到VM的設置,如果您在與預期不同的位置進行構建,則可能需要進行調整。 並且請注意適用於linux文件名的區分大小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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