docker-composeの-f付きupコマンドを使用した時に.envが適用されない時の対処法

はじめに

vagrantなどで起動した時に、dockerも自動で起動したいなーと設定してみまたのですが、.envで設定されたデータが反映されずエラーが発生してしまいました。

 

構成

ディレクト構造

├─ usr
└─ docker
   ├─ .env
   └─ docker-compose.yml

 

.env

DB_NAME=test
DB_USER=user
DB_PASS=password
DB_PORT=13306
TZ=Asia/Tokyo

 

docker-compose.yml

version: '3.3'
services:
  mysql:
    image: mysql:8.0.18
    environment:
      - MYSQL_DATABASE=${DB_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASS}
      - MYSQL_ROOT_PASSWORD=${DB_PASS}
      - TZ=${TZ}
    ports:
      - ${DB_PORT}:3306
    volumes:
      - ./mysql/var_lib_mysql:/var/lib/mysql
      - ./mysql/init:/docker-entrypoint-initdb.d
      - ./mysql/logs:/var/log/mysql 
    command: --innodb-use-native-aio=0
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=root
      - PMA_PASSWORD=${DB_PASS}
    links:
      - mysql
    ports:
      - 8080:80
    volumes:
      - /sessions

 

発生している問題

以下のコマンドを行うと.envが読み込まれずにエラーが発生してしまいます。

$ pwd
/usr
$ docker-compose -f "/docker/docker-compose.yml" up -d
WARNING: The DB_NAME variable is not set. Defaulting to a blank string.
WARNING: The DB_USER variable is not set. Defaulting to a blank string.
WARNING: The DB_PASS variable is not set. Defaulting to a blank string.
WARNING: The TZ variable is not set. Defaulting to a blank string.
WARNING: The DB_PORT variable is not set. Defaulting to a blank string.
ERROR: The Compose file '/docker/docker-compose.yml' is invalid because:
services.mysql.ports contains an invalid type, it should be a number, or an object

 

解決策

docker-compose up--project-directory を付随すれば.envが適用されました。

$ pwd
/usr
$ docker-compose --project-directory "/docker/" -f "/docker/docker-compose.yml" up -d
Creating vagrant_mysql_1 ... done
Creating vagrant_phpmyadmin_1 ... done

 

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-Docker
-,