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定義します。を実行する前に指定されたボリュームを作成しなかった場合、通常は実行時に権限を持つユーザーであるため、そのボリュームのディレクトリが無効な権限で作成された可能性があります。dbdbdbdocker-compose up/var/lib/mysqldocker-compose

常にホストがボリュームをスキャンできるようにする必要があり、ボリュームを読み取り専用として新しいコンテナにマウントして表示することもできます(最小イメージまたは空のイメージが最適です)。ホスト上で実行してdocker volume inspect dbホストに基づいてファイルの場所を取得し、実行してdocker volume listdocker-composeがボリューム名を別々に指定していることを確認できます。外部ファイルのバックエンドがない場合は、chownコンテナ内で必要なディレクトリをユーザーのUIDに直接指すことができるはずです。

docker-composeクラスタを実行する前に、まずdb名前付きボリュームを作成し、必要なディレクトリに適切な権限があることを確認する前に、これらすべてを実行する必要があります。

おすすめ記事