docker.env文件重复使用声明的variables
当我运行docker-compose构build时,我有一个.env文件用于在我的docker-machine上构build环境variables,如下所示:
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”这样的冗余是一样的..有没有办法避免这种情况?
在Dockerfile
做这样的事情呢?
ARG DB_NAME ENV DB_NAME=${DB_NAME} PGDATABASE=${DB_NAME} ...
testing
$ 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在构build时间和运行时期间被设置。
没有撰写 :
docker build --build-arg DB_NAME=world .
和docker run docker-arg-env:latest env
产生相同的结果。
- Docker环境variables和Django数据库设置
- 带有env的Docker命令var prepended(local env var)
- 从Docker中检测Virtualbox
- 将docker环境variables设置为具有不同名称的现有环境variables
- Docker入口脚本无法获得$ DB_PORT_3306_TCP_ADDR环境variables
- 我怎样才能使用一个环境variables作为docker集装箱的名称?
- Docker组合共享环境variables
- 在docker-compose.yml的入口点env文件中的环境variables
- 如何在Dockerfile中设置ENVvariables.txt文件中的内容?