Compose: env_fileへの相対パス

作成日 2017年04月26日  ·  3コメント  ·  ソース: docker/compose

docker-composeファイルと同じフォルダーにない場合、.envファイルに問題があります。 それをサブフォルダーに配置して参照すると、変数が未定義であると単純に示され、デフォルトで空白の文字列になります。 .envファイルを削除すると、.envファイルが見つからないと表示されるため、ファイルは検出されますが、何も実行されません。 .envファイルをdocker-composeファイルと同じディレクトリに移動し、そのパスを更新するか、代わりにシンボリックリンクを作成すると、すべて正常に機能します。

どうやらdocker-composeには、docker-composeファイルと同じディレクトリにないenvファイルのロードに問題があるようです。

現在、サブフォルダー内のLaravelプロジェクトと共有されている.envファイルをシンボリックリンクすることで、これを「修正」しました。

私のdocker-composeファイル(簡略化):

version: '3'

services:
  mysql:
    image: mariadb
    volumes:
      - mysql_data:/var/lib/mysql/data
    env_file:
      - ./api/.env
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_USER: ${DB_USERNAME}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}

volumes:
  mysql_data:
kinquestion

最も参考になるコメント

ねえ@ shin-、私は正確な問題を抱えています。
公式ドキュメント(https://docs.docker.com/compose/env-file/)と、投稿したトピックを読みましたが、質問に答えられませんでした。 OPが言ったように、.envファイルがdocker-compose.ymlのパスとは異なるパスにある場合、それは機能しません。

version: '3.7'
services:
  postgres:
    image: postgres:alpine
    restart: always
    environment:
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
  php:
    build:
      context: .
      dockerfile: ./docker/php/Dockerfile
    restart: always
    env_file:
      - ./app/.env
    volumes:
      - ./app:/usr/src/app
  nginx:
    image: nginx:1.15.3-alpine
    restart: always
    volumes:
      - ./app:/usr/src/app
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    ports:
      - ${NGINX_PORT}:80
    depends_on:
      - php

./app/の中に、独自の.envを持つsymfonyアプリケーションがあり、イメージの構築に使用されるenv変数を同じ.envに入れて、それを機能させるために、2つの.envがあります。1つはdocker-にあります。私のアプリディレクトリにディレクトリと1つを作成します

全てのコメント3件

これは以前に回答されています:

4001

4618

明確化のページを参照してください: https

ねえ@ shin-、私は正確な問題を抱えています。
公式ドキュメント(https://docs.docker.com/compose/env-file/)と、投稿したトピックを読みましたが、質問に答えられませんでした。 OPが言ったように、.envファイルがdocker-compose.ymlのパスとは異なるパスにある場合、それは機能しません。

version: '3.7'
services:
  postgres:
    image: postgres:alpine
    restart: always
    environment:
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
  php:
    build:
      context: .
      dockerfile: ./docker/php/Dockerfile
    restart: always
    env_file:
      - ./app/.env
    volumes:
      - ./app:/usr/src/app
  nginx:
    image: nginx:1.15.3-alpine
    restart: always
    volumes:
      - ./app:/usr/src/app
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    ports:
      - ${NGINX_PORT}:80
    depends_on:
      - php

./app/の中に、独自の.envを持つsymfonyアプリケーションがあり、イメージの構築に使用されるenv変数を同じ.envに入れて、それを機能させるために、2つの.envがあります。1つはdocker-にあります。私のアプリディレクトリにディレクトリと1つを作成します

Afaik環境変数はアプリケーションにインポートされますが、docker-composeファイルで使用することはできません(NGINX_PORTで行ったように。同じディレクトリに別の.envファイルを使用し、本当に必要な場合はアプリケーションからロードします。本当に必要です。

このページは役に立ちましたか?
0 / 5 - 0 評価