2017-11-14 10 views
0

웹 서버와 데이터베이스로 구성된 서비스를 모든 도킹 컨테이너에 작성하려고합니다. 현재 데이터베이스 자격 증명을 포함하는 두 환경에 동일한 환경 파일을 만들려고합니다. 불행히도 데이터베이스를 만들려고 할 때 비어있는 것으로 나타납니다. 두 구성 요소 모두에 대해 단일 환경 파일로 프로젝트를 만들려면 어떻게해야합니까?환경 변수를 도커 파일 빌드에 전달하십시오.

다음
version: '2' 

services: 
    db: 
    build: 
     context: . 
     dockerfile: Dockerfile-db 
    ports: 
     - '5433:5432' 
    env_file: 
     - env 
    web: 
    build: . 
    ports: 
     - '8000:8000' 
    command: venv/bin/python manage.py runserver 0.0.0.0:8000 
    depends_on: 
     - db 
    env_file: 
     - env 

데이터베이스를 만들기위한 책임을 내 Dockerfile-DB 파일의 일부입니다 : 여기 내 고정 표시기 - compose.yml입니다

FROM ubuntu:16.04 

RUN apt-get update && apt-get install -y postgresql-9.5-postgis-2.2 

USER postgres 

ARG DB_PASSWORD 
ARG DB_NAME 

RUN echo $DB_PASSWORD 

RUN /etc/init.d/postgresql start && \ 
    psql --command "ALTER USER postgres WITH PASSWORD '$DB_PASSWORD';" && \ 
    psql --command "CREATE DATABASE $DB_NAME;" && \ 
    psql --command "\\c $DB_NAME" && \ 
    psql --command "CREATE EXTENSION postgis;" && \ 
    psql --command "CREATE EXTENSION postgis_topology;" 

그리고 내 ENV 파일은 다음 한 구조 :

DB_NAME=some_name 
DB_USER=postgres 
DB_PASSWORD=some_password 
DB_HOST=db 
DB_PORT=5432 

답변

1

환경 파일은 빌드 프로세스의 일부가 아니며 컨테이너를 실행할 때 사용됩니다.

build-args를 사용해야합니다. 고정 표시기-작성에서는 파일에 인수를 구축 지정할 수 있습니다 : 당신은 당신이 그것에서 자격 증명을 저장하는 한, composefile을 게시 할 경우

build: 
    context: . 
    dockerfile: Dockerfile-db 
    args: 
    DB_NAME: some_name 
    DB_USER: postgress 
    ... 

이 좋은 생각되지 않을 수도 있습니다. 에 어떤 빌드를 지정하지 실행할 때 명시 적으로 구축하고 --build-arg

docker-compose build --build-arg DB_NAME= some_name ... 

에 합격 할 수 docker-compose run --no-build

업데이트 : @gonczor에 의해 제안

, 짧은 청정 구문은 ENV를 전달 사용 파일이 빌드 args :

docker-compose build --build-args $(cat envfile) 
+0

나는이 메시지를 계속 --build-arg가 n 지원되지 않습니다. 'docker-compose' 버전 때문일 수 있습니까? (나는 1.8을 달리고있다) 사용법 : 빌드 [옵션] [서비스 ...] 옵션 : --force-rm 중간 컨테이너를 항상 제거한다. --no-cache 이미지를 빌드 할 때 캐시를 사용하지 마십시오. --pull 항상 최신 버전의 이미지를 가져 오려고 시도하십시오. – gonczor

+0

가능합니다. 'docker-compose build --help'가'--build-arg' 옵션을 보이지 않는다면, 도커를 수정해야합니다. – yamenk

+0

도움을 주셔서 감사합니다. 그것은 효과가 있었다. 그리고 나는 해결 방법을 생각해 냈다. 방금 명령에'--build-args $ (cat env)'를 추가했습니다. 당신이 대답에 그것을 더하는 것이 친절하다면 나는 감사 할 것입니다. – gonczor