質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

0回答

2051閲覧

Dockerで立ち上げた「いろはボード」のボリューム永続化

hndhdk

総合スコア19

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2018/11/21 07:57

編集2022/01/12 10:55

前提・実現したいこと

Dockerでいろはボードというサイトを立ち上げようとしています。
いろはボードはeラーニングシステムで画像などのファイルをアップロードすることができます。
ただDockerのコンテナ内にアップロードされるためボリュームをホストと共有したいと思っています。

コンテナを起動したコマンド

docker run -v testvolume:/var/www/html/webroot/uploads -d -p 8001:80 -e MARIADB_ROOT_PASS=XXX-e IROHABOARD_DB_PASS=XXX --link mariadb:mariadb --name irohaboard bbrfkr0129/irohaboard

発生している問題・エラーメッセージ

ホストとのボリュームは共有できているのですが、
いろはボードでファイルのアップロードに失敗します。
以下はいろはボードのエラーログです。
/var/www/html/tmp/logs/error.log

2018-11-21 16:20:39 Warning: Warning (2): move_uploaded_file() [<a href='http://php.net/function.move-uploaded-file'>function.move-uploaded-file</a>]: Unable to move '/tmp/php3ojFdJ' to '/var/www/html/webroot//uploads/20181121162039.jpg' in [/var/www/html/Vendor/FileUpload.php, line 52] Trace: move_uploaded_file - [internal], line ?? FileUpload::saveFile() - APP/Vendor/FileUpload.php, line 52 ContentsController::admin_upload() - APP/Controller/ContentsController.php, line 299 ReflectionMethod::invokeArgs() - [internal], line ?? Controller::invokeAction() - CORE/Cake/Controller/Controller.php, line 490 Dispatcher::_invoke() - CORE/Cake/Routing/Dispatcher.php, line 193 Dispatcher::dispatch() - CORE/Cake/Routing/Dispatcher.php, line 167 [main] - APP/webroot/index.php, line 168

エラーの原因としてはアップロード先のURLが誤っているためと認識しています。
【誤】/var/www/html/webroot//uploads/20181121162039.jpg
【正】/var/www/html/webroot/uploads/20181121162039.jpg

ホストとボリュームを共有しない(-vオプションを付けない)場合は上記問題は発生しません。

試したこと

  • docker run -v testvolume:/var/www/html/webrootと/uploadsを省いた状態でコンテナを起動すると問題なくアップロードできる
  • docker run -v /data:/var/www/html/webroot/uploadsのようにホストのパス指定の形に変更しても状況は変わらない
  • /var/www/html/webroot/uploadsにtouchコマンドでファイルを追加してホストと共有されることは確認できた

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2018/11/22 10:51

Unable to moveの理由をもう少し調査してみてはいかがでしょうか?
hndhdk

2018/11/26 00:14

CakePHPのWWW_ROOTという変数を参照してアップロードパスを生成しているのですが、ボリュームを共有した場合にその変数が最後にスラッシュを付けて返却されるようになっています。.htaccessの内容は変わっていないためなぜWWW_ROOTの値が変わってしまうのかわかっていません。
t_obara

2018/11/28 10:29

アップロードパスが正しい場合には想定どおりアップロードできるのですね?
hndhdk

2018/11/28 11:53

はい、アップロードパスが正しい場合はアップロードできます。
t_obara

2018/12/01 04:28

では、問題の本質は、Dockerの有無に関わらず、WWW_ROOTに設定される値を変えないようにしたいけどどうしたら良いのかということでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問