Dockerコンテナ内にプログラムがあります。ブラウザのページに移動し、Dockerコンテナを実行してプログラムを起動したいと思います。
だからDockerコマンドを実行するbashスクリプトを作成しました(runcontainer.sh):
#!/bin/sh
sudo docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix myproject
その後、シェルスクリプト(Web script.php):
<?php
exec('/usr/lib/cgi-bin/runcontainer.sh');
?>
私はapache2がインストールされているUbuntu 16.04を実行しています。
質問:php webscript.php
このプログラムは、bash端末で実行すると実行されます。コンテナが起動し、プログラムが起動します。しかし、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
は引き続き表示されます。私が見つけた他の答えは、www-data ALLアクセスを許可するためにsudoersファイルを変更すると言いました。しかし、安全ではないようで、これをやりたくありません。
ベストアンサー1
あなたが経験しているエラーメッセージを再現するために、いくつかの実験(Apacheの代わりにCronを使用し、代わりに/bin/ls
Cronを使用)を行いました。これに基づいて、必要なコマンドをパスワードなしで実行できるかどうかを最初にruncontainer.sh
確認することをお勧めします。www-data
パスワードなしでコマンドを実行できることを確認するには、rootとしてログインしてから
# su - -s /bin/bash www-data
$ sudo /usr/lib/cgi-bin/runcontainer.sh
また、ユーザーに対して有効になって/etc/sudoers
いることを確認する必要があります。/usr/lib/cgi-bin/runcontainer.sh
www-data
%www-data ALL=(ALL) NOPASSWD: /usr/lib/cgi-bin/runcontainer.sh
上記がうまくいけば、次のステップに集中できます。