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

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

新規登録して質問してみよう
ただいま回答率
85.37%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

VMware

VMwareとは、 ハードウェアで動作するOS上で仮想マシンを作成、実行するソフトウェアです。 Windows上でUNIX系OSを動作させたり、他のOS上で別の仮想OSを動作することが可能です。

Docker

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

Q&A

解決済

2回答

43970閲覧

dockerコンテナ内からホストに権限を与えることはできるか

MycoChild

総合スコア36

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

VMware

VMwareとは、 ハードウェアで動作するOS上で仮想マシンを作成、実行するソフトウェアです。 Windows上でUNIX系OSを動作させたり、他のOS上で別の仮想OSを動作することが可能です。

Docker

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

0グッド

0クリップ

投稿2021/04/03 12:33

編集2021/04/03 12:54

docker初心者です;;
ホストOS Macで、VMware fusionのゲストOS Ubuntu環境にさらにdockerコンテナのLAMP環境で独習PHPという本のソースを動かしてます。以下のプログラムで、

PHP

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8" /> 5<title>アップロード処理</title> 6</head> 7<body> 8<form method="POST" action="file2.php" enctype="multipart/form-data"> 9<label for="upfile">ファイルのパス:</label> 10<input type="hidden" name="max_file_size" value="1000000" /> 11<input id="upfile" type="file" name="upfile" size="40" /> 12<input type="submit" value="アップロード" /> 13</form> 14</body> 15</html>

画像をアップロードするという課題があります。

PHP

1<?php 2$ext = pathinfo($_FILES['upfile']['name']); 3$perm = ['gif', 'jpg', 'jpeg', 'png']; 4 5if ($_FILES['upfile']['error'] !== UPLOAD_ERR_OK) { 6 $msg = [ 7 UPLOAD_ERR_INI_SIZE => 'php.iniのupload_max_filesize制限を越えています。', 8 UPLOAD_ERR_FORM_SIZE => 'HTMLのMAX_FILE_SIZE 制限を越えています。', 9 UPLOAD_ERR_PARTIAL => 'ファイルが一部しかアップロードされていません。', 10 UPLOAD_ERR_NO_FILE => 'ファイルはアップロードされませんでした。', 11 UPLOAD_ERR_NO_TMP_DIR => '一時保存フォルダが存在しません。', 12 UPLOAD_ERR_CANT_WRITE => 'ディスクへの書き込みに失敗しました。', 13 UPLOAD_ERR_EXTENSION => '拡張モジュールによってアップロードが中断されました。' 14 ]; 15 $err_msg = $msg[$_FILES['upfile']['error']]; 16} elseif (!in_array(strtolower($ext['extension']), $perm)) { 17 $err_msg = '画像以外のファイルはアップロードできません。'; 18} elseif (!@getimagesize($_FILES['upfile']['tmp_name'])) { 19 $err_msg = 'ファイルの内容が画像ではありません。'; 20} else { 21 $src = $_FILES['upfile']['tmp_name']; 22 $dest = mb_convert_encoding($_FILES['upfile']['name'], 'SJIS-WIN', 'UTF-8'); 23 if (!move_uploaded_file($src, 'doc/'.$dest)) { 24 $err_msg = 'アップロード処理に失敗しました。'; 25 } 26} 27if (isset($err_msg)) { 28 die('<div style="color:Red;">'.$err_msg.'</div>'); 29} 30header('Location: http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/file1.php'); 31

Ubuntuのブラウザで画像を選択するセレクトボックスを押すと、当然ながらUbuntuのファイルウィンドウが開きます。画像をアップロードすると、Ubuntuに対して権限がないので?、アップロード処理に失敗しました。となります。
コンテナからホストであるUbuntuに対してchmod 777するとか、もしくはファイルウィンドウからコンテナ内の画像をアップロードするとかできませんか。
Dockerfileで何か指定するとか?
(頓珍漢なこと言っているかも)
駄文すみません。

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

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

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

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

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

hoshi-takanori

2021/04/03 22:00

docker run -v でホスト側のディレクトリを doc にマウントしてるのに書き込めないということでしょうか? また、ファイル名をわざわざ Shift-JIS にする必要はあるのでしょうか?
guest

回答2

0

自己解決

コンテナ内でchmod 777 ./doc
でできました。

投稿2021/04/04 04:20

MycoChild

総合スコア36

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

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

comefigo

2021/04/04 11:46

アップロード先がコンテナ内であれば、コンテナを破棄した際(削除&再作成)にデータが消えますので、永続化も考慮されると安全かと思います。
MycoChild

2021/04/07 06:07 編集

永続化する方法教えていただきたいです。 永続化といば、これはVMwareのゲストOS内(Ubuntu)でも、Dockerコンテナ内でもなのですが、 ~/.bash_profileに ``` alias ls='ls -F' alias vi='vim' alias cddesktop='cd /mnt/hgfs/desktop' alias pip='pip3' alias pbcopy='xsel --clipboard --input' alias de='docker exec -it' ``` のような設定を書いているのですが、dockerをexitしたり、端末を閉じたりすると毎回設定が消えて? ``source ~./bash_profile`` のコマンドをいちいち打っているのですがこれも永続化出来たりしますか?
guest

0

ファイルアップロード時のエラーログはありませんか?

error_get_last() で取れるかもしれませんので、お試してみてください。
https://www.php.net/manual/ja/function.error-get-last.php

投稿2021/04/03 17:12

comefigo

総合スコア1051

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

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

comefigo

2021/04/04 11:46

アップロード先がコンテナ内であれば、コンテナを破棄した際(削除&再作成)にデータが消えますので、永続化も考慮されると安全かと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問