我写了一个 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
我不想直接在compose文件中定义这些参数,因此我尝试在docker compose构建期间发送它们:
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:
Docker 版本为 1.12.6
,不支持使用 --build-arg
传递参数。
编辑2:
我尝试按照 这里 描述的方法使用 .env
文件:
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
文件中:version: "2"
services:
ui:
build:
context: .
dockerfile: Dockerfile
args:
- REP_USER
- REP_PASS
并执行:
export REP_USER=myusername;export REP_PASS=mypassword;sudo docker-compose build --no-cache
仍然没有得到我想要的。
1.12.6
,不支持那个。 - Zeinab Abbasimazardocker-compose
放入$HOME/bin
中,它应该会被执行而不是系统默认值。 - fzgregorecho "$PATH"
的输出中包含$HOME/bin
,那么它应该可以工作。(原则上) - fzgregor