docker 上的 nextcloud - 初始化数据库时出错

docker 上的 nextcloud - 初始化数据库时出错

当启动我的 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

如果您正在使用官方mariadbDocker 镜像,该脚本要求运行容器的用户可写入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命名卷并确保必要的目录具有适当的权限。

相关内容