明白,你不想裝入卷,而是希望有這樣它可以共享圖像的這些文件的一部分。至少假設這一點。
作爲每Docker documentation
COPY遵循以下規則:
- 路徑必須是構建的上下文內;你不能COPY ../something/something,因爲docker build的第一步是將上下文目錄(和子目錄)發送到docker守護進程。
- 如果是目錄,則複製該目錄的全部內容,包括文件系統元數據。
您現在可能得到了這個問題。在你的Dockerfile
即,COPY
聲明是問題,因爲它是指絕對路徑不符合上述第一條規則。因此,htdocs
應在您執行docker build
命令的本地目錄中可用。需要構建圖像之前取得
以下變化:
- 希望您可能已經創建了一個目錄(你正在構建圖像)和該目錄包含
Dockerfile
,httpd-custom.conf
文件。
- 現在,進入上述目錄並將
/opt/mw/apache-2.2.31-instance1/htdocs
複製到當前目錄。因此,htdocs
目錄現在可以在構建映像時成爲上下文的一部分(如文檔中所述)。
- 變化
Dockerfile
以下(主要是COPY命令)內容:
FROM httpd:2.2.31
RUN mkdir -p /opt/mw/apache-test/logs
ADD ./httpd-custom.conf /usr/local/apache2/conf/httpd.conf
COPY htdocs /usr/local/apache2/htdocs
現在,你應該能夠成功地建立它。
對於剛剛演示中,使用了重量輕busybox
創造在同一背景下的目錄(模擬你的情況下),它的確如你看到下面:
$ more Dockerfile
FROM busybox
COPY data_folder /opt/data_folder
CMD ["ls", "/opt/data_folder"]
$ ls
data_folder Dockerfile
$ ls data_folder/
test.txt
製作圖片:
$ sudo docker build -t dirtest .
Sending build context to Docker daemon 3.584 kB
Step 1 : FROM busybox
---> e02e811dd08f
Step 2 : COPY data_folder /opt/data_folder
---> b6b1a9555825
Removing intermediate container b682e0467803
Step 3 : CMD ls /opt/data_folder
---> Running in 3b05f08ceafc
---> b73190fc1fd9
Removing intermediate container 3b05f08ceafc
Successfully built b73190fc1fd9
在容器的圖片上方運行,顯示目錄'data_folder'被複制並顯示其內容。在你的情況下,htdocs
$ sudo docker run -it --rm --name testdirtest dirtest
test.txt
來源
2016-10-29 02:39:32
Rao
是您的主機上/opt/mw/apache-2.2.31-instance1/htdocs/存在的目錄? – harrybvp
更重要的是,該目錄是否存在於作爲構建圖像的上下文傳遞的路徑中?另外,儘量不要混合ADD和COPY,Docker建議使用COPY。並刪除源文件夾的尾部斜線 – R0MANARMY
對於第一個問題,是的目錄存在。它是我一直用來測試的。 對於第二個問題。我想它存在,我正在使用Apache映像。 https://hub.docker.com/_/httpd/ – radicaled