上搬运工Dockerfile通环境构成建立

问题描述:

我写了一个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 

还是没有得到我想要的东西。

我终于找到了解决办法。我在这个问题中也提到过它。我第一次尝试失败,然后我发现我有一个错字命名为.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真的很有帮助。

您可以设置建立与码头工人组成的参数描述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

我会检查是否可以更新;并非所有的工作方法都在我的办公室掌控之中。 –

在docker-compose文件中,变量替换的正确语法是$ {VARNAME}。 这一个尝试:

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

它没有为我工作 –