env-файл и MariaDB в docker-compose - PullRequest
       8

env-файл и MariaDB в docker-compose

0 голосов
/ 25 декабря 2018

Я пытаюсь настроить nextcloud на Raspberry Pi 3B + с MariaDB, примерно следуя этому примеру:

https://github.com/nextcloud/docker/blob/master/.examples/docker-compose/with-nginx-proxy/mariadb/apache/docker-compose.yml

Мой составной файл выглядит следующим образом:

version: '3'

services:
  db:
    image: mariadb
    env_file:
    - pi.env
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - ${BASE_PATH}/db:/var/lib/mysql

  nextcloud:
    image: nextcloud:apache
    env_file:
      - pi.env
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes: 
      - ${BASE_PATH}/www:/var/www
    depends_on:
      - db
    environment:
      - MYSQL_HOST=db

Затем есть файл pi.env:

MYSQL_PASSWORD=secure-password
MYSQL_ROOT_PASSWORD=even-more-secure.password
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
BASE_PATH=/tmp

После запуска docker-compose up из каталога, где находятся yaml и env-файл, два контейнера запускаются нормально.Увы, соединение с базой данных не может быть установлено, потому что db-контейнер принимает только пустой пароль (при открытии оболочки в контейнере и запуске mysql -u nextcloud без передачи пароля, я получаю доступ к базе данных).Тем не менее, переменная окружения $ MYSQL_ROOT_PASSWORD может быть корректно выведена из контейнера.

Если я запускаю mariadb-образ в одиночку с docker run -e MYSQL_ROOT_PASSWORD=secure-password, все ведет себя как ожидалось.

Может кто-то указать мне намоя ошибка?

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Я наконец вылечил свою настройку некоторое время назад.К сожалению, я не могу восстановить то, что сделал трюк (и мои сообщения git commit были не настолько ясны для моего будущего я, как я надеялся, что они будут: D).

Но мне кажется, что исключительно объявлениеПеременные среды для пароля базы данных в файле pi.env вместо docker-compose.yaml сделали свое дело.

Мой docker-compose.yaml:

services:
  db:
    image: jsurf/rpi-mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
    restart: always

    volumes:
      - db:/var/lib/mysql
    env_file:
      - pi.env

  nextcloud:
    image: nextcloud:apache
    restart: always
    container_name: nextcloud
    volumes: 
      - www:/var/www/html
    environment:
      - VIRTUAL_HOST=${VIRTUAL_HOST}
      - LETSENCRYPT_HOST=${VIRTUAL_HOST}
      - LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
      - MYSQL_HOST=db
      - NEXTCLOUD_TRUSTED_DOMAINS=${VIRTUAL_HOST}
      - NEXTCLOUD_TRUSTED_DOMAINS=proxy
    env_file:
      - pi.env
    depends_on:
      - db
    networks:
      - proxy-tier
      - default

pi.env:

MYSQL_PASSWORD=secure-password
MYSQL_ROOT_PASSWORD=even-more-secure.password
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud

Но спасибо, тем не менее @Zanndorin!

0 голосов
/ 14 февраля 2019

Я знаю, что это супер поздний ответ, но я только что наткнулся на него, пока Гуглил что-то совершенно не связанное.

Если я правильно помню, вы должны указать docker-compose, чтобы фактически отправлять переменные ENV в докер с помощьюпросто объявив их в окружении.

environment:
      - MYSQL_HOST=db
      - MYSQL_PASSWORD
      - MYSQL_USER

Я никогда не объявлял .env-файл в docker-compose, так что, возможно, это уже решает эту проблему.Я использую его таким образом (у меня также есть файл .env, который я иногда переопределяю из некоторых значений).

Пример из моего контейнера разработчика MariaDB:

 environment:
      - MYSQL_DATABASE=mydb
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASSWORD}
      - MYSQL_ROOT_PASSWORD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...