Docker for WindowsでownCloudサーバ構築・・・・でも問題有り

Hyper-Vを使ったDocker for Windowsは果たしてどこまで使えるのか・・・・

という追求をしているわけでは無いのですが。

ownCloudサーバを動かしてみて、感じをつかもうと思います。

ownCloudサーバのインストール手順

複数コンテナの連携に便利な、docker-composeを使おうと思います。

  1. Docker for Windowsをインストールします。
    こちらの記事です。
  2. dockerコンテナからWindowsのドライブへアクセスできるように設定しておきます。C:ドライブにownCloud用の実行フォルダを作る場合。Docker for Windowsの設定を開き、「Shared Drives」のCにチェックを入れました。
    dockershareddrives
  3. コマンドプロンプトを開き、ownCloud用のフォルダを作成します。
    mkdir c:\owncloud
    cd /d c:\owncloud
  4. テキストエディタで、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’」の間にスペースを追加しました。

  5. docker-composeを起動します。
    docker-compose up -d
  6. ブラウザで、http://localhost:8080にアクセスします。
    うまく起動していれば、初期設定画面が表示されるので、docker-compose.ymlのコメント欄を参考に、初期設定を行います。
    owncloud

さて。

Mac版のときは、これで設定が完了だったのですが。

Windows版はどうも・・・・・いくつかの問題に対応する必要がありそうです。


データディレクトリのパーミッション0770問題対応

初期設定が完了して、いざ使おうとすると。

次の画面が表示されました。

chown「データディレクトリ(/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の問題なのか・・・

様子を見る必要がありそうです。

スポンサーリンク

フォローする

スポンサーリンク