5

我寫了一個Dockerfile它採用兩個參數:上搬運工Dockerfile通環境構成建立

FROM jessie 
MAINTAINER Zeinab Abbasimazar 
#Build Arguments 
ARG REP_USER 
ARG REP_PASS 
# Build 
RUN echo 'REP_USER:'$REP_USER', REP_PASS:'$REP_PASS 

我寫了一個docker-compose.yml的構建:

version: "2" 
services: 
    ui: 
    build: 
     context: . 
     dockerfile: Dockerfile 
     args: 
     REP_USER: $REP_USER 
     REP_PASS: $REP_PASS 

我不想定義這些參數直接在撰寫文件中,所以我試圖在碼頭工作人員撰寫構建時發送它們:

REP_USER=myusername REP_PASS=mypassword docker-compose build 

哪些沒有工作。我改變了我的Dockerfile使用這些參數作爲環境變量;所以我刪除ARG線:

FROM jessie 
MAINTAINER Zeinab Abbasimazar 
# Build 
RUN echo 'REP_USER:'$REP_USER', REP_PASS:'$REP_PASS 

而且docker-compose.yml

version: "2" 
    services: 
    ui: 
     build: 
     context: . 
     dockerfile: Dockerfile 

奔着REP_USER=myusername REP_PASS=mypassword docker-compose build;仍然沒有結果。

我也試圖將這些信息保存到一個文件env

version: "2" 
services: 
    ui: 
    build: 
     context: . 
     dockerfile: Dockerfile 
    env_file: 
     - myenv.env 

但似乎env文件在製作的時候不影響;他們只是參與運行時間。

編輯1:

泊塢版本1.12.6不支持傳遞參數與--build-arg

編輯2:

我嘗試使用.env文件描述here

cat .env 
REP_USER=myusername 
REP_PASS=mypassword 

我當時叫docker-compose config其返回:

networks: {} 
services: 
    ui: 
    build: 
     args: 
     REP_PASS: mypassword 
     REP_USER: myusername 
     context: /home/zeinab/Workspace/ZiZi-Docker/Test/test-exec-1 
     dockerfile: Dockerfile 
version: '2.0' 
volumes: {} 

這意味着這解決了我的問題。

編輯3:

我也嘗試過的docker-compose arg documentation第三部分我docker-compose.yml文件:

​​

並執行:

export REP_USER=myusername;export REP_PASS=mypassword;sudo docker-compose build --no-cache 

還是沒有得到我想要的東西。

回答

0

我終於找到了解決辦法。我在這個問題中也提到過它。我第一次嘗試失敗,然後我發現我有一個錯字命名爲.env文件;它是.evn

我嘗試使用.env文件描述here

cat .env 
REP_USER=myusername 
REP_PASS=mypassword 

我當時叫docker-compose config其返回:

networks: {} 
services: 
    ui: 
    build: 
     args: 
     REP_PASS: mypassword 
     REP_USER: myusername 
     context: /home/zeinab/Workspace/ZiZi-Docker/Test/test-exec-1 
     dockerfile: Dockerfile 
version: '2.0' 
volumes: {} 

這意味着這解決了我的問題。我應該提到this answer真的很有幫助。

4

您可以設置建立與碼頭工人組成的參數描述here

docker-compose build [--build-arg key=val...] 
docker-compose build --build-arg REP_USER=myusername --build-arg REP_PASS=mypassword 

順便說一句,據我所知建參數是易用性和確定性的建築物之間的妥協。 Docker旨在以確定性的方式構建。也就是說,無論你在哪裏執行構建,生成的圖像都應該是相同的。因此,客戶機忽略執行的環境(變量)似乎是合乎邏輯的。

+0

我的碼頭版本是'1.12.6',不支持。 –

+0

要壞。更新是沒有選擇的?在「正常」的Linux中,你可以把'docker-compose'的最新版本放到'$ HOME/bin'中,並且它應該被執行而不是系統默認。 – fzgregor

+0

我會檢查是否可以更新;並非所有的工作方法都在我的辦公室掌控之中。 –

0

在docker-compose文件中,變量替換的正確語法是$ {VARNAME}。 這一個嘗試:

version: "2" 
    services: 
    ui: 
     build: 
     context: . 
     dockerfile: Dockerfile 
     args: 
     REP_USER: ${REP_USER} 
     REP_PASS: ${REP_PASS} 
+0

它沒有爲我工作 –