web-dev-qa-db-ja.com

docker-composeでディスクに再アクセスできないのはなぜですか?

Dockerのドキュメントによると、redisを使用してpythonアプリの非常に簡単な最初のテストを試しました。redisが持続できないため、しばらくするとクラッシュします。理由はわかりません。できます。ここでパブリックリポジトリを見つけます: Githubリポジトリ

私の現在のdocker-compose.ymlは次のとおりです。

web:
  build: .
  ports:
   - "5000:5000"
  volumes:
   - .:/code
  links:
   - redis
redis:
  image: redis:latest
  volumes:
  - ./data:/data

編集:これはログの抜粋です:

1:M 09 Feb 10:51:15.130 # Background saving error
1:M 09 Feb 10:51:21.072 * 100 changes in 300 seconds. Saving...
1:M 09 Feb 10:51:21.073 * Background saving started by pid 345
345:C 09 Feb 10:51:21.074 # Failed opening .rdb for saving: Permission denied
1:M 09 Feb 10:51:21.173 # Background saving error
1:M 09 Feb 10:51:27.011 * 100 changes in 300 seconds. Saving...
1:M 09 Feb 10:51:27.011 * Background saving started by pid 346
346:C 09 Feb 10:51:27.013 # Failed opening .rdb for saving: Permission denied

Edit2:これはRedisがPythonでスローする完全なエラーです:

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error

面白いのは、redisイメージには何もしないということです。

14
Dennis Decoene

これは権限エラーです。docker exec -it redis_container_name bashを介してredisコンテナにログインし、/dataへの書き込み権限があることを確認してください。

おそらくそうではなく、いくつかの方法で修正できます。ホストをバインドマウントする代わりにdocker volumeを使用するか、コンテナ内の所有者とuid/gidを一致させることでホストからのアクセス許可を修正してみてください。

また、Dockerハブページに記載されているように、redisのコマンドを次のように設定する必要があります。

web:
  build: .
  ports:
   - "5000:5000"
  volumes:
   - .:/code
  links:
   - redis
redis:
  image: redis:latest
  command: redis-server --appendonly yes
  volumes:
  - ./data:/data

データを永続化する場合。

dataフォルダーに間違ったアクセス許可が設定されているため、まずフォルダーを削除し、docker-composeに新しいアクセス許可を作成させます。

27
Louis Kottmann

リポジトリを動作バージョンのタグ0.2で更新しました

Dockerファイルのバージョン2を使用すると、正常に機能しました。

0
Dennis Decoene