首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker-compose:主机环境变量的优先级比.env文件高吗?

docker-compose:主机环境变量的优先级比.env文件高吗?
EN

Stack Overflow用户
提问于 2017-02-06 15:51:19
回答 2查看 3.7K关注 0票数 2

我想将.env文件中的环境变量设置到容器中。但是主机环境变量被设置为容器,而不是.env文件。

按如下方式设置文件。

主机# ls -la:

代码语言:javascript
复制
docker-compose.yml
Dockerfile
.env

主机环境变量:

代码语言:javascript
复制
JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre"
LANG="en_US.UTF-8"

.env文件:

代码语言:javascript
复制
TZ=Asia/Tokyo
LANG=ja_JP.utf8
ORACLE_URL=http://download.oracle.com/otn-pub/java/jdk/8u112-b15/jdk-8u112-linux-x64.rpm
ORACLE_VERSION=8u112
JAVA_HOME=/usr/java/jdk1.8.0_112/jre

docker-compose.yml:

代码语言:javascript
复制
version: '2'
services:

  oracle8:
    build:
      context: ./
      args:
        ORACLE_URL: ${ORACLE_URL}
        ORACLE_VERSION: ${ORACLE_VERSION}
    environment:
      - TZ=$TZ
      - LANG=$LANG
      - JAVA_HOME=$JAVA_HOME
    image: oracle8
    privileged: true
    tty: true
    container_name: oracle8
    hostname: oracle8

Dockerfile:

代码语言:javascript
复制
FROM centos:latest

ARG ORACLE_URL
ARG ORACLE_VERSION
ARG JAVA_HOME

ENV JAVA_HOME       ${JAVA_HOME}

RUN set -x \
    && yum update -y \
    && yum install -y wget tar \
    && yum clean all \
    && wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" ${ORACLE_URL} \
    && rpm -ivh                 jdk-"${ORACLE_VERSION}"-linux-x64.rpm \
    && rm -f                    jdk-"${ORACLE_VERSION}"-x64.rpm \
    && echo ${JAVA_HOME}


CMD ["tail", "-f", "/dev/null"]

然后,docker-compose build & up

代码语言:javascript
复制
host # docker-compose build
host # docker-compose up -d 
host # docker exec -it oracle8 bash
oracle8 # export
    JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre"
    LANG="en_US.UTF-8"
    TZ="Asia/Tokyo"

$TZ是从.env文件设置的,因为主机未设置$TZ。$LANG和$JAVA_HOME没有设置为.env文件的"ja_JP.utf8“和"/usr/java/jdk1.8.0_112”,而是主机环境变量"en_US.UTF-8“和"/usr/lib/jvm/java-8-oracle/jre”。

如果我直接在docker-compose.yml中编写它,它是可以的。但我想在.env文件中处理它。

EN

回答 2

Stack Overflow用户

发布于 2019-12-31 04:23:50

变量的优先级按以下顺序排列:

  1. 合成文件本身
  2. shell变量
  3. .env shell

可以在这里找到:here

票数 3
EN

Stack Overflow用户

发布于 2017-02-07 15:13:34

在外壳中设置的环境变量优先于在.env文件中设置的环境变量:https://docs.docker.com/compose/environment-variables/#/the-env-file

您可以在.env文件中重命名冲突的变量名称,然后在Dockerfile中再次重命名它们

.env

代码语言:javascript
复制
DOCKER_JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre"

Dockerfile

代码语言:javascript
复制
ARG DOCKER_JAVA_HOME
ENV JAVA_HOME=${DOCKER_JAVA_HOME}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42062744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档