docker-compose で、nextcloud と postgresql を以下のように定義したが起動しなかった。
docker-compose.yml
version: '3'
services:
app:
image: nextcloud:15.0.5
ports:
- 8080:80
depends_on:
- db
volumes:
- nextcloud:/var/www/html
environment:
- POSTGRES_HOST=db
- POSTGRES_DB=nextcloud
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=secret
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=admin
restart: always
db:
image: postgres:9.6
restart: always
volumes:
- postgres:/var/lib/postgresql/data
environment:
- POSTGRES_DB=nextcloud
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=secret
volumes:
nextcloud:
driver: local
postgres:
driver: local
コンテナの出力には、以下のような permission denied for database となっているが、
db_1 | 2019-04-01 14:24:55.443 UTC [71] FATAL: permission denied for database "nextcloud" db_1 | 2019-04-01 14:24:55.443 UTC [71] DETAIL: User does not have CONNECT privilege.
postgres のコンテナに nextcloud というデータベースで postgres ユーザがスーパーユーザでアクセスできているように見える。
$ docker-compose exec -it -u postgres db /bin/bash
$ psql nextcloud postgres
nextcloud=# \du
List of roles
Role name | Attributes | Member of
------------+------------------------------------------------------------+-----------
oc_admin | Create DB | {}
oc_admin10 | Create DB | {}
oc_admin11 | Create DB | {}
oc_admin12 | Create DB | {}
oc_admin13 | Create DB | {}
oc_admin14 | Create DB | {}
oc_admin15 | Create DB | {}
oc_admin16 | Create DB | {}
oc_admin2 | Create DB | {}
oc_admin3 | Create DB | {}
oc_admin4 | Create DB | {}
oc_admin5 | Create DB | {}
oc_admin6 | Create DB | {}
oc_admin7 | Create DB | {}
oc_admin8 | Create DB | {}
oc_admin9 | Create DB | {}
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
nextcloud=# \q
このデータベースを削除することで nextcloud 側で自動的にデータベースを作成してくれた。
$ dropdb nextcloud postgres
nextcloud のコンテナの動作が今後変わると修正されるかもしれない。