![](/img/trans.png)
[英]`docker-compose build` not finding file or directory after COPY
[英]Docker: copy file and directory with docker-compose
我為需要一些許可證文件(一些文件和一個目錄)才能運行的自定義應用程序創建了一個 Docker 映像,因此我使用Dockerfile
中的 COPY 命令將許可證文件復制到映像:
# Base image: Application installed on Debian 10 but unlicensed
FROM me/application-unlicensed
# Copy license files
COPY *.license /opt/application/
COPY application-license-dir /var/lib/application-license-dir
我使用這個Dockerfile
來構建具有單個容器許可證的新映像。 因為我有 5 個不同的許可證,所以我創建了 5 個不同的圖像,每個圖像都有一個特定的許可證文件和目錄。
許可證也固定為MAC 地址,因此當我運行五個容器之一時,我使用--mac-address
參數指定其自己的 MAC 地址:
docker run --rm --mac-address AB:CD:EF:12:34:56 me/application-license1
這項工作,但我希望有一個更好,更聰明的方式來管理這個:
與docker-compose
,是否可以指定容器 MAC 地址,當我使用docker-compose
構建 5 個容器時,是否可以只使用未經許可的基本映像並復制許可證文件和許可證目錄?
編輯:讓我更好地解釋許可證文件的結構
應用程序部署到/opt/application
目錄到 Docker 映像中。
許可證文件 ( *.license
) 位於應用程序本身同一級別的/opt/application
中,除非我創建一些符號鏈接,否則它們無法保存到 Docker 卷中(但我必須檢查應用程序是否會以這種方式工作)。
目錄 application-license-dir 需要位於/var/lib/application-license-dir
,因此它可以安裝到 Docker 卷中(我必須檢查應用程序是否可以工作,但我認為可以)。
*.license
文件和application-license-dir
中的文件都是二進制文件,因此我無法在運行時編寫腳本或創建它們。
所以:
docker-compose
可以在 Docker 主機服務器上創建一個本地目錄,然后再將其綁定並安裝到 Docker 卷上嗎?docker-compose
可以將我的許可證文件和我的許可證目錄從 GIT 存儲庫(本地克隆)復制到步驟 1 中創建的本地目錄嗎?docker-compose
可以為存儲在卷中的*.license
文件在容器的/opt/application
目錄中創建一些符號鏈接嗎?對於每次運行容器或在不同系統上運行容器時都不同的內容,您通常不希望在 Dockerfile 中指定這些內容。 這包括您在上面顯示的許可證文件; 像用戶 ID 這樣的東西也符合這種模式; 根據您的配置文件的固定程度,它們也可以計算在內。 (對於每次運行容器時都相同的東西,您確實希望在您的映像中使用這些;尤其是這是應用程序源代碼。)
您可以使用 Docker綁定掛載在運行時將文件注入容器。 使用volumes:
指令綁定掛載有 Compose 語法。
這會給你一個 Compose 文件,大致如下:
version: '3'
services:
app1:
image: me/application-unlicensed
volumes:
- './app1.license:/opt/application/app.license'
- './application-license-dir:/var/lib/application-license-dir'
mac_address: 'AB:CD:EF:12:34:56'
像這樣的綁定掛載非常適合將配置文件推送到容器中。 它們可以提供一個可以寫入日志文件的空主機目錄,但不是從圖像中復制數據的機制。 如果您的應用程序無法將其所有 state 存儲在外部數據庫中,它們也可用作存儲需要比容器壽命更長的數據的地方。
根據這個提交docker-compose 有mac_address
支持。 使用-v
掛載許可證文件可能是一種選擇。
您可以將不同容器的 mac_address 設置為mac_address: AB:CD:EF:12:34:12
。 有關文檔參考, 請參閱此
要從同一個圖像創建多個實例,您必須在 docker-compose 文件中復制粘貼每個應用程序塊 5 次,並且每次可以設置不同的 mac_address
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.