Hyper-Vを使ったDocker for Windowsは果たしてどこまで使えるのか・・・・
という追求をしているわけでは無いのですが。
ownCloudサーバを動かしてみて、感じをつかもうと思います。
ownCloudサーバのインストール手順
複数コンテナの連携に便利な、docker-composeを使おうと思います。
- Docker for Windowsをインストールします。
こちらの記事です。 - dockerコンテナからWindowsのドライブへアクセスできるように設定しておきます。C:ドライブにownCloud用の実行フォルダを作る場合。Docker for Windowsの設定を開き、「Shared Drives」のCにチェックを入れました。
- コマンドプロンプトを開き、ownCloud用のフォルダを作成します。
mkdir c:\owncloud cd /d c:\owncloud
- テキストエディタで、docker-compose.ymlファイルを作成します。
Official Repositoryを参考に、Windowsで動作するように変更しています。# ownCloud with MariaDB/MySQL # # Access via "http://localhost:8080" (or "http://$(docker-machine ip):8080" if using docker-machine) # # During initial ownCloud setup, select "Storage & database" --> "Configure the database" --> "MySQL/MariaDB" # Database user: root # Database password: example # Database name: pick any name # Database host: replace "localhost" with "mysql" version: '2' services: mysql: image: mysql:5.7 volumes: - c:\owncloud\db:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: "example" owncloud: depends_on: - mysql image: owncloud links: - mysql volumes: - c:\owncloud\html:/var/www/html ports: - "8080:80"
※2016.11.10追記: docker-composeが起動しなかったため、11行目を変更しました。
「version:」と「’2’」の間にスペースを追加しました。 - docker-composeを起動します。
docker-compose up -d
- ブラウザで、http://localhost:8080にアクセスします。
うまく起動していれば、初期設定画面が表示されるので、docker-compose.ymlのコメント欄を参考に、初期設定を行います。
さて。
Mac版のときは、これで設定が完了だったのですが。
Windows版はどうも・・・・・いくつかの問題に対応する必要がありそうです。
データディレクトリのパーミッション0770問題対応
初期設定が完了して、いざ使おうとすると。
次の画面が表示されました。
「データディレクトリ(/var/www/html/data)は他のユーザーも閲覧することができます
ディレクトリが他のユーザーから見えないように、パーミッションを0770に変更してください。」
これはおそらく、ownCloudのデータ用フォルダに指定したファイルシステムがNTFSであることが関連する感じです。
Docker for Windowsは、Volumesでマウントしたフォルダのパーミッションは0755になります。smbを使用しているため、パーミッションを変えることはできないそうです。
※2017.7.5Nextcloud構築記事の情報をもとに修正致しました。
さて。ファイルシステムが違うパーミッションが変えられないという、根源的な問題ですので、回避策をとろうと思います。
こちらのownCloudのフォーラムを参考に、util.phpを変更、パーミッションを確認しないように変更しました。
c:\owncloud\html\lib\private\util.php または c:\owncloud\html\lib\private\legacy\util.php |
変更前
if (substr($perms, -1) != '0') {
chmod($dataDirectory, 0770);
clearstatcache();
$perms = substr(decoct(@fileperms($dataDirectory)), -3);
if (substr($perms, 2, 1) != '0') {
変更後
if (substr($perms, -1) != '5') {
chmod($dataDirectory, 0775);
clearstatcache();
$perms = substr(decoct(@fileperms($dataDirectory)), -3);
if (substr($perms, 2, 1) != '5') {
※18.7.26追記:Docker バージョン18.06.0の場合、次のように変更しないと動きませんでした。
if (substr($perms, -1) != '7') {
chmod($dataDirectory, 0777);
clearstatcache();
$perms = substr(decoct(@fileperms($dataDirectory)), -3);
if (substr($perms, 2, 1) != '7') {
ホスト名がlocalhostに変わってしまう問題対応
ownCloudにアクセスしたとき、ホスト名が勝手に「http://localhost:8080」に代わってしまいました。
localhost以外に対応するため、ownCloudの設定をエディタで変更しました。
c:\owncloud\html\config\config.php |
変更前
array (
0 => 'localhost:8080'
),
変更後
array (
0 => 'localhost:8080', 1 => '<ホスト名>:8080', 2 => '<ipアドレス>:8080'
),
ホスト名とIPアドレスを書き足したかたちです。
さて。
これで一応、動作はするのですが。
使ってみたところ、結構な頻度で、mysqlがExitしてしまい、コンテナが再起動している感じです。
これはdocker for Windowsの問題なのか、Hyper-Vの問題なのか・・・
様子を見る必要がありそうです。