devellopah
@devellopah

Почему монтируется папка .env вместо файла .env при попытке поднять Octobercms на docker?

Доброй ночи. Хочу поднять эту cms через docker, нашёл репу
Использовал такой docker-compose.yml
#docker-compose.yml
version: '2.2'
services:
  web:
    image: aspendigital/octobercms:latest
    init: true
    restart: always
    ports:
      - 80:80
    environment:
      - TZ=Europe/Moscow
    volumes:
      - ./.env:/var/www/html/.env
      - ./plugins:/var/www/html/plugins
      - ./storage/app:/var/www/html/storage/app
      - ./storage/logs:/var/www/html/storage/logs
      - ./themes:/var/www/html/themes
  mysql:
    image: mysql:5.7
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=octobercms


Выполняю конфигурацию и получаю ошибку


Starting 71128a7f7e03_october_web_1 ... error

ERROR: for 71128a7f7e03_october_web_1 Cannot start service web: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"rootfs_linux.go:58: mounting \\\"/home/devellopah/projects/october/.env\\\" to rootfs \\\"/var/lib/docker/overlay2/f03809fe2b8b7517227a731122a2b22569cad1014295a15a40e73d62c0989b3d/merged\\\" at \\\"/var/lib/docker/overlay2/f03809fe2b8b7517227a731122a2b22569cad1014295a15a40e73d62c0989b3d/merged/var/www/html/.env\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

ERROR: for web Cannot start service web: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"rootfs_linux.go:58: mounting \\\"/home/devellopah/projects/october/.env\\\" to rootfs \\\"/var/lib/docker/overlay2/f03809fe2b8b7517227a731122a2b22569cad1014295a15a40e73d62c0989b3d/merged\\\" at \\\"/var/lib/docker/overlay2/f03809fe2b8b7517227a731122a2b22569cad1014295a15a40e73d62c0989b3d/merged/var/www/html/.env\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
ERROR: Encountered errors while bringing up the project.


автор в readme файле говорит:

On image build, a default .env is created...


Так как мне "вытащить" .env файл из контейнера, чтобы я мог редактировать его без необходимости лезть в сам контейнер?

Этот том не делает то, что ожидается
- ./.env:/var/www/html/.env

--------------------------------------------------------
os - linux mint 19.1 Tessa
Docker version 19.03.1, build 74b1e89
docker-compose version 1.24.0, build 0aa59064
  • Вопрос задан
  • 412 просмотров
Решения вопроса 1
deepblack
@deepblack
Потому что .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 в самом контейнере, вместо того чтобы его пробрасывать внутрь.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Попробуйте octobercms-docker-starter-kit.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы