Потому что .env подключается вот так
version: "3.5"
services:
db:
build:
context: ./docker
dockerfile: postgresql.Dockerfile
env_file:
- .env
restart: always
volumes:
- postgres:/var/lib/postgresql/data
ports:
- "127.0.0.1:5432:5432"
redis:
env_file:
- .env
restart: always
image: redis:3.0
expose:
- "6379"
UPD:
.env файл обычно (всегда) не ложат в контейнер, скорее наоборот всячески избегают этого,
т.к. в нём хранится чувствительная информация, как правило это различные токены и т.д.
Хранение подобного в репозитории это плохой тон. Но можно хранить какой-нибудь
example.env
в качестве образца.
В данном образе
.env файл создается автоматически при билде образа и содержит одну единственную строку.
Вот команда которой он создается:
echo 'APP_ENV=docker' > .env
Если вы внимательно посмотрите в README, то увидите что там об этом говорится .
Помимо этого, автор рекомендует монтировать .env файл из вне, либо копировать его в контейнер (что является общепринятой практикой)
В Readme написано:
Database credentials and other sensitive information should not be committed to the repository. Those required settings should be outlined in .env.example
Passing environment variables via Docker can be problematic in production. A phpinfo() call may leak secrets by outputting environment variables. Consider mounting a .env volume or copying it to the container directly.
Честно говоря, не понятно ваше стремление редактировать .env в самом контейнере, вместо того чтобы его пробрасывать внутрь.