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