Docker 컨테이너 안에 프로그램이 있습니다. 브라우저 페이지로 이동하여 Docker 컨테이너를 실행하여 프로그램이 시작되기를 원합니다.
그래서 Docker 명령을 실행하는 bash 스크립트를 만들었습니다(runcontainer.sh):
#!/bin/sh
sudo docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix myproject
그런 다음 쉘 스크립트(웹 script.php):
<?php
exec('/usr/lib/cgi-bin/runcontainer.sh');
?>
나는 apache2가 설치된 우분투 16.04를 실행하고 있습니다.
질문:php webscript.php
이 프로그램은 bash 터미널에서 실행하면 실행됩니다. 컨테이너가 시작되고 프로그램이 시작됩니다. 하지만 웹 브라우저(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
비밀번호 없이 명령을 실행할 수 있는지 확인하려면 루트로 로그인한 다음
# 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
위의 내용이 작동하면 다음 단계에 집중할 수 있습니다.