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

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

新規登録して質問してみよう
ただいま回答率
85.48%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

Q&A

解決済

2回答

1817閲覧

webサイトにアクセスした際に、dockerコンテナの生成をしたい。

free_white_life

総合スコア15

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

0グッド

0クリップ

投稿2018/09/20 07:14

前提・実現したいこと

webサイトにアクセスした際に、dockerコンテナの生成をしたい。
こんにちは。卒業研究で学習サイトを作成しています。
そこでsample.phpにアクセスした際にhoge.shを読み込んで、dockerを生成したいです。
環境はubuntuにnginx、php、dockerを入れています。docker上にnginxを立てているわけではありません。

またwebにアクセスした際にdockerを起動する別の良い方法があれば教えていただきたいです。
よろしくお願いいたします。

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

webへのアクセス時、/var/log/nginx/error.logとwebブラウザ(php.iniでエラー表示するように設定済み)には何も表示されません。

該当のソースコード

sample.php <?php shell_exec('./hoge.sh'); ?>
hoge.sh #!/bin/sh docker run -d centos /sbin/init

試したこと

php sample.php
とCUIで実行した場合にはコンテナが立ち上がりました。

補足情報(FW/ツールのバージョンなど)

selinuxは無効です。ubuntu16.04, php7.0, docker18.06.1-ce

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

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

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

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

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

guest

回答2

0

何も表示されていないなら実行されているかもわからないですね。
いくつか気になったのは

・パスは通ってますかね? /home/user/hoge.sh とか実際のパスで実行したほうがいいかも
・shの方をdocker run -d centos /sbin/init > /tmp/log.txt 2>&1 してはどうでしょう?ログ(エラー)が出力されますかね?

投稿2018/09/20 07:23

taka2063

総合スコア307

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

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

free_white_life

2018/09/25 06:53

taka2063さんありがとうございます。実行しましたが今回はログは吐かれませんでした。しかしそういった方法もあることを学んだので今後利用させていただきます。 問題についてですが試しにmkdirをhoge.shに書き込んだところ、ユーザがwww-dataで実行されていたので、www-dataにsudo nopasswdの実行権限を与え、hoge.sh内のdockerコマンドにsudoを付けたところ解決しました。 本当にありがとうございました。
guest

0

ベストアンサー

shell_exec

注意:

この関数は、エラーが発生した場合だけでなくプログラムが何も出力しなかった場合にも NULL を返します。 そのため、実行に失敗したノかどうかをこの関数では判断できません。 プログラムの終了コードを調べる必要があるときには exec() を使いましょう

とのことなので、exec()で実行してエラーを取得するところからトライしてみると良いと思います。
参考

勘としては、

  • Apacheの実行ユーザに実行権限が無いパーミッションになっている
  • ./hoge.shをフルパスでの指定に変更する

あたりで何とかなりそうな気がします。

投稿2018/09/20 07:22

tanat

総合スコア18713

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

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

free_white_life

2018/09/25 01:30

回答ありがとうございます! shell_execの件勉強になりました。 execで実行した所、やはりエラーログは出ませんでした。 パスの件ですがフルパスにしhoge.shを #!/bin/sh docker run -d centos /sbin/init mkdir aaa としたところ、ディレクトリaaaが作成されましたが、dockerは作成、起動されませんでした。 dockerコマンド自体に権限などはあるのでしょうか?
free_white_life

2018/09/25 06:50

試しにmkdirをhoge.shに書き込んだところ、ユーザがwww-dataで実行されていたので、www-dataにsudo nopasswdの実行権限を与え、hoge.sh内のdockerコマンドにsudoを付けたところ解決しました。 ありがとうございました。
tanat

2018/09/25 11:24

上手くいったようで何よりです。 &解決方法のご報告ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問