TL;DR
我が家では Nextcloud を Docker で運用していますが、サクッと構築したかったので Docker Image には nextcloud ではなく linuxserver/nextcloud を利用しています。
Nextcloud 配下のファイルやディレクトリを Nextcloud 以外の手段(SMB, FTP, SCP etc...)で追加/変更/削除すると、その変更が Nextcloud 上に自動的に反映されません。
このため、 occ
というコマンドを使ってファイルとディレクトリをスキャンする必要があるのですが、そのやり方が少しだけ普通とは違っていたのでメモです。
前提条件
- Docker Image: linuxserver/nextcloud:latest (2018/07/01 時点のもの)
- Version: Nextcloud 13.0.5 (12 系でも同じ手順でできたはず。。。)
解決したいこと
linuxserver/nextcloud を用いた Docker Container で、 Nextcloud 管理下のディレクトリ内にあるファイルやサブディレクトリについて、 Container 上で追加/削除されたファイルが Nextcloud に反映されていないのを反映させたい。
やり方
Container ID を調べる
対象となる Docker Container(linuxserver/nextcloud
) の Container ID を調べます。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
317d6fb4633e linuxserver/nextcloud:latest "/init" 3 weeks ago Up 3 weeks 80/tcp, 0.0.0.0:10443->443/tcp nextcloud_20180701
上記例では 317d6fb4633e
が Container ID です。
Nextcloud の Container にログインする
上記で調べた Container ID を利用して、 linuxserver/nextcloud
の Container にログインします。
# docker exec -it 317d6fb4633e bash
$ hostname
nextcloud
ファイルとディレクトリをスキャンする
occ
コマンドを用いてファイルとディレクトリをスキャンします。
occ
ファイルのパスと、実行時に sudo -u abc
する点が通常とは異なります。
$ sudo -u abc php /config/www/nextcloud/occ files:scan --all
Scanning files for 2 users
Starting scan for user 1 out of 2 (ktooi)
Starting scan for user 2 out of 2 (johndoe)
+---------+-------+--------------+
| Folders | Files | Elapsed time |
+---------+-------+--------------+
| 335 | 2880 | 00:00:10 |
+---------+-------+--------------+
以上でスキャンは完了です。
Nextcloud 上からファイルやディレクトリを確認すると、反映されていなかったファイルやディレクトリの追加/削除が反映されているはずです。
おしまい。。。?
追伸
Container ID まで調べたら、 Container にログインせずに直接 occ
を docker exec
すればいいんじゃね?って投稿ボタンを押す直前に思った。
# docker exec -it 317d6fb4633e sudo -u abc php /config/www/nextcloud/occ files:scan --all
Scanning files for 2 users
Starting scan for user 1 out of 2 (ktooi)
Starting scan for user 2 out of 2 (johndoe)
+---------+-------+--------------+
| Folders | Files | Elapsed time |
+---------+-------+--------------+
| 335 | 2880 | 00:00:11 |
+---------+-------+--------------+
うん、らくちん。
Container Name を固定にしていれば(例では nextcloud_20180701
)、 Container ID も
$ docker ps --filter status=running --filter name=nextcloud_20180701 --format {{.ID}}
317d6fb4633e
のように一撃で取得できるので、
$ docker exec -it $(docker ps --filter status=running --filter name=nextcloud_20180701 --format {{.ID}}) sudo -u abc php /config/www/nextcloud/occ files:scan --all
というコマンド一発で一発で完了です。
これなら Docker ホストの Cron にでも仕込んで定期的にファイルをスキャンとか簡単にできますね。
本当におしまい。