Dockerコンテナーに配置するプログラムがあります。ブラウザページに移動してDockerコンテナを実行し、プログラムが起動できるようにします。
そこで、Dockerコマンド(runcontainer.sh)を実行するbashスクリプトを作成しました。
#!/bin/sh
sudo docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix myproject
次に、そのシェルスクリプト(webscript.php)を実行するPHPファイルを作成しました。
<?php
exec('/usr/lib/cgi-bin/runcontainer.sh');
?>
apache2をインストールした状態でubuntu 16.04を実行しています。
問題: bashターミナルで
実行するphp webscript.php
とプログラムが実行されます。コンテナが起動し、プログラムが起動します。ただし、Webブラウザー(firefox)から試しても、そうではありません。
http://localhost/cgi-bin/webscript.phpにアクセスすると、ページが表示されますが、Dockerコンテナーが起動しません。そこで、/ var / log / apache2 / error.logを見て、次のエラーを見ました:sudo: no tty present and no askpass program specified
。
同様の質問に基づいてsudo apachectl -S
、Apacheユーザーとグループの名前を見に走り ました。両方のwww-dataです。そこで、ユーザーとグループを/ usr / lib / cgi-bin /ディレクトリにwww-dataに設定します。
www-dataに完全なアクセス許可がある場合でも、sudo: no tty present and no askpass program specified
エラーが表示されます。私が見つけた他の答えは、sudoersファイルを変更してwww-dataにすべてのアクセスを与えると言いました。安全ではないように思えるので、私はそれをしたくありませんでした。
%www-data ALL=(ALL) NOPASSWD: /usr/bin/lib/cgi-bin
/ etc / sudoersスクリプトの最後に追加し、でApacheサーバーを再起動しservice apache2 restart
ました。同じttyエラーが発生しました。
www-data
ルートになることを許可すると、一般に大きなセキュリティリスクになることに注意してください。