2017-02-15 16 views
2

当我运行搬运工,撰写构建我有一个.ENV文件用于我的泊坞窗机建设环境变量是这样的:搬运工.ENV文件重用声明的变量

COMPOSE_PROJECT_NAME=radar 
ENV=production 
DB_NAME=postgres 
DB_USER=postgres 
DB_PASS=sho1c2ov3Phezaimah7eb2Tii4ohkah8k 
DB_SERVICE=postgres 
DB_PORT=5432 
C_FORCE_ROOT="true" 
PGHOST=postgres 
PGDATABASE=postgres 
PGUSER=postgres 
PGPASSWORD=sho1c2ov3Phezaimah7eb2Tii4ohkah8k 
PGPORT=5432 

如果你已经注意到了冗余像'DB_NAME'和'PGDATABASE'是一样的..有没有办法避免这种情况?

回答

2

关于您Dockerfile做这样的事情是什么?

ARG DB_NAME 
ENV DB_NAME=${DB_NAME} PGDATABASE=${DB_NAME} ... 

测试

$ cat Dockerfile 
FROM alpine:3.4 

ARG DB_NAME 
ENV DB_NAME=${DB_NAME} PGDATABASE=${DB_NAME} 

RUN env 

撰写文件版本2或更高!

$ cat docker-compose.yml 
version: '3' #'2' should work as well 

services: 
    docker-arg-env: 
    build: 
     context: . 
     args: 
     - DB_NAME 
    command: env 

$ cat .env 
DB_NAME=world 

$ docker-compose build 
Building docker-arg-env 
Step 1/4 : FROM alpine:3.4 
---> 0766572b4bac 
Step 2/4 : ARG DB_NAME 
---> Running in a56be8426dd5 
---> 4b1009ba9fad 
Removing intermediate container a56be8426dd5 
Step 3/4 : ENV DB_NAME ${DB_NAME} PGDATABASE ${DB_NAME} 
---> Running in 5bbdd40e640e 
---> 593105981a2a 
Removing intermediate container 5bbdd40e640e 
Step 4/4 : RUN env 
---> Running in dadf204c7497 
HOSTNAME=26ba10d264c2 
SHLVL=1 
HOME=/root 
PGDATABASE=world 
DB_NAME=world 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
PWD=/ 
---> 9632ee1e0e37 
Removing intermediate container dadf204c7497 
Successfully built 9632ee1e0e37 

$ docker-compose up 
Creating network "dockerargenv_default" with the default driver 
Creating dockerargenv_docker-arg-env_1 
Attaching to dockerargenv_docker-arg-env_1 
docker-arg-env_1 | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
docker-arg-env_1 | HOSTNAME=5a6b51f4ecc7 
docker-arg-env_1 | DB_NAME=world 
docker-arg-env_1 | PGDATABASE=world 
docker-arg-env_1 | HOME=/root 

正如你所看到的,PG_NAME和PGDATABASE期间构建时设置和运行时间。

没有撰写

docker build --build-arg DB_NAME=world .docker run docker-arg-env:latest env产生相同的结果。

更新

如果你不能(或不愿)修改Dockerfile尝试是这样的:

$ cat .env 
hello=world 

$ cat docker-compose.yml 
version: '2' 
services: 
    app: 
    environment: 
     - bar=${hello} 
     - foo=${hello} 
    image: someimage 

$ docker-compose config 
version: '2' 
services: 
    app: 
    environment: 
     - bar=world 
     - foo=world 
    image: someimage 

见:https://docs.docker.com/compose/environment-variables/#the-env-file

+0

你试过了吗?不幸的是,它不适用于我 –

+0

我现在;-)答案中包含示例。 – Martin

+0

噢,我完全忘了你正在使用'docker-compose build'。应该再读一遍问题。 – Martin