【備忘録】Ubuntu22.04のDocker -v でエラーになる原因と対処方法

2023-02-09

現在、自分のサーバー(ubuntuserver 22.04)でNextcloudを使えるようにしたいと思い色々と試しています。

OnlyOfficeを使えるようにdockerに書かれている手順に沿って作業を進めていたのですがエラーで進めなかったので、原因と対処方法を記載しています。

コマンドとエラー

~$ sudo docker run -i -t -d -p 80:80 \
    -v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  \
    -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  onlyoffice/documentserver

...中略...

docker: Error response from daemon: error while creating mount source path '/app/onlyoffice/DocumentServer/logs': mkdir /app: read-only file system.

原因

SNAPでDockerをインストールしていたため

UbuntuServerのインストール時に一緒にdockerをインストールしましたが、SNAPでインストールされていたようです。

理由

docker run -v ではホストのディレクトリをコンテナ内でマウントしますが、SNAPでdockerをインストールした場合は、SNAPのサンドボックス機能でホストディレクトリは読み込み専用で扱われるとの事です。

I ran into the same issue and found an explanation in the docker/docker-snap README:

All files that docker needs access to should live within your $HOME folder.

If the docker-compose.yml is outside of the $HOME folder, docker-snap won’t see it.

Solution: Move the docker-compose.yml (and accompanying files) inside your $HOME directory.

https://github.com/docker/compose/issues/6361

そのため、/appを作成できずにエラーになっていたようです。

対処方法

SNAPを使わずにDockerをインストール

原因はSNAPのサンドボックス機能のため、一度SNAP版Dockerを削除してaptでインストールすれば手順通りに進みます。

/homeディレクトリを使う

-vオプションでマウントするディレクトリを変更して、/home以下に変更すればエラーにならずに動作しました。

~$ sudo docker run -i -t -d -p 80:80 \
    -v /home/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  \
    -v /home/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  onlyoffice/documentserver

疑問点としては、{$HOME}なので本来は実行したユーザーのホームディレクトリしか書き込めないとは思うのですが、新しいディレクトリを作成できていました。

コンテナを自動起動にした場合でも対応できるので、問題は無いのですが…。