Я пытаюсь настроить nextcloud на Raspberry Pi 3B + с MariaDB, примерно следуя этому примеру:
Мой файл компоновки выглядит так:
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, все будет вести себя так, как ожидалось.
Может ли кто-нибудь указать мне на мою ошибку?


Я знаю, что это очень поздний ответ, но я только что наткнулся на него, когда гуглил что-то совершенно не связанное с этим.
Если я правильно помню, вы должны указать 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
Некоторое время назад я наконец вылечил свою установку. К сожалению, я больше не могу реконструировать, в чем был трюк (и мои сообщения 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!
есть та же проблема