2017-11-14 16 views
0

ウェブサーバーとデータベースからなるサービスをすべてドッキング用のコンテナに作成しようとしています。現在私は両方のデータベースの資格情報を含むだろう同じ環境ファイルを作成しようとしています。不幸にも、データベースを構築しようとすると、空であることがわかります。どのようにして、両方のコンポーネントに単一の環境ファイルを持つプロジェクトを作成できますか?ここに私のドッキングウィンドウ-compose.ymlは次のとおりです。ここで環境変数をドッカーファイルビルドに渡す

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ファイルの一部です:

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を使用する必要があります。ドッキングウィンドウ-構成では、ファイル内の引数を構築指定することができます。

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

あなたがcomposefileを公開したい場合は、その中に資格情報を格納しているように、これは、良いアイデアではないかもしれません。 @gonczorによって示唆されるように、

使用するために短く、きれいな構文をENVを渡す:明示的--build-arg

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

そしてdocker-compose run --no-build

アップデートで何のビルドを指定しないで実行を構築して渡すことができますファイルはビルド引数として:

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

関連する問題