当启动我的 nextcloud 容器时,docker-compose up
我遇到了错误:
db_1_7bb6e5f5b725 | Initializing database
db_1_7bb6e5f5b725 | mkdir: cannot create directory '/var/lib/mysql//mysql': Permission denied
db_1_7bb6e5f5b725 | Fatal error Can't create database directory '/var/lib/mysql//mysql'
db_1_7bb6e5f5b725 |
db_1_7bb6e5f5b725 | The latest information about mysql_install_db is available at
db_1_7bb6e5f5b725 | https://mariadb.com/kb/en/installing-system-tables-mysql_install_db
test_db_1_7bb6e5f5b725 exited with code 1
指定的docker-compose如下所示:
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb
user: www-data
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=***
- MYSQL_PASSWORD=***
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud
ports:
- 8080:80
links:
- db
volumes:
- nextcloud:/var/www/html
restart: always
答案1
如果您正在使用官方mariadb
Docker 镜像,该脚本要求运行容器的用户可写入docker-entrypoint.sh
该路径。/var/lib/mysql
否则容器将无法启动
在您的 中docker-compose.yml
,您定义了一个db
要安装到db
容器的命名卷。如果您db
在执行之前没有创建指定卷docker-compose up
,则/var/lib/mysql
该卷中的目录可能是使用不正确的权限创建的,因为您在运行时通常是特权用户docker-compose
。
您应该始终能够从主机检查卷,您也可以将卷以只读方式安装到新容器中以查看它(最小或空白图像效果最好)。从主机上,您可以运行docker volume inspect db
以获取相对于主机的文件位置,运行docker volume list
以查看 docker-compose 是否以不同的方式命名卷。如果您没有外来文件后端,您应该能够chown
从容器内将必要的目录直接指向用户的 UID。
所有这些都应该在尝试运行docker-compose
集群之前完成,首先创建db
命名卷并确保必要的目录具有适当的权限。