目次
はじめに
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