上搬运工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旨在以确定性的方式构建。也就是说,无论你在哪里执行构建,生成的图像都应该是相同的。因此,客户机忽略执行的环境(变量)似乎是合乎逻辑的。
在docker-compose文件中,变量替换的正确语法是$ {VARNAME}
。 这一个尝试:
version: "2"
services:
ui:
build:
context: .
dockerfile: Dockerfile
args:
REP_USER: ${REP_USER}
REP_PASS: ${REP_PASS}
它没有为我工作 –
我的码头版本是'1.12.6',不支持。 –
要坏。更新是没有选择的?在“正常”的Linux中,你可以把'docker-compose'的最新版本放到'$ HOME/bin'中,并且它应该被执行而不是系统默认。 – fzgregor
我会检查是否可以更新;并非所有的工作方法都在我的办公室掌控之中。 –