我正在尝试使用MariaDB在Raspberry Pi 3B +上设置nextcloud,大致遵循以下示例:
我的撰写文件如下:
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
从yaml和env文件所在的目录中运行docker-compose up
后,两个容器可以正常启动。遗憾的是,无法建立数据库连接,因为db-container仅接受一个空密码(弹出容器中的shell并运行mysql -u nextcloud
而不输入密码即可访问数据库)。仍然可以从容器正确地回显$ MYSQL_ROOT_PASSWORD环境变量。
如果我单独使用docker run -e MYSQL_ROOT_PASSWORD=secure-password
启动mariadb图像,那么一切都会按预期进行。
有人可以指出我的错误吗?
答案 0 :(得分:0)
我知道这是一个超级晚的答案,但是我在搜寻完全不相关的内容时偶然发现了这个问题。
如果我没记错的话,您必须告诉docker-compose通过在环境中声明它们来将ENV变量实际发送到docker。
environment:
- MYSQL_HOST=db
- MYSQL_PASSWORD
- MYSQL_USER
我从未在docker-compose中声明过.env文件,因此也许已经解决了该问题。我以这种方式使用它(我还有一个.env文件,有时我会覆盖其中的一些值)。
我的开发人员MariaDB容器中的示例:
environment:
- MYSQL_DATABASE=mydb
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASSWORD}
- MYSQL_ROOT_PASSWORD
答案 1 :(得分:0)
我终于在一段时间前治愈了我的设置。可悲的是,我无法再重新构造出这个技巧了(我的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少了!