2017-02-06 5 views
0

Я хочу установить переменные окружения из .env-файла в контейнер. Но переменные среды окружения устанавливаются в контейнер вместо файла .env.docker-compose: переменные среды хостов имеют более высокий приоритет, чем файл .env?

Настройка файлов следующим образом.

хост # Ls -la:

docker-compose.yml 
Dockerfile 
.env 

хозяина переменной среды:

JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre" 
LANG="en_US.UTF-8" 

.env файл:

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 

докер-compose.yml:

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:

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"] 

, а затем, докер-Compose строить & до

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 не установлены «ja_JP.utf8» и «/usr/java/jdk1.8.0_112» файла .env, но «en_US.UTF-8» и «/ usr/lib/jvm/java-8 -oracle/jre "установлены переменные среды хоста.

Если я пишу его прямо в файле docker-compose.yml, все в порядке. , но я хочу обработать его в файле .env.

ответ

0

переменные окружения, установленные в оболочке превосходить те, которые в .env файле: https://docs.docker.com/compose/environment-variables/#/the-env-file

Что вы можете сделать, это переименовать конфликтующие имена переменных в файле .env и переименовать их снова в вашем Dockerfile:

.env:

DOCKER_JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre" 

Dockerfile:

ARG DOCKER_JAVA_HOME 
ENV JAVA_HOME=${DOCKER_JAVA_HOME} 
+0

Благодарим вас за советы. Я пересмотрел его, как вы сказали. –

+0

Waht о приоритете в целом? shell, compose file, .env, env_file, '' '-e''' параметр – lrkwz