2015-07-17 3 views
2

Я пытаюсь запустить команду из моего index.php:Docker команды с помощью PHP shell_exec

$output = shell_exec('docker images'); 

и затем выводятся результаты,

или запустить новый контейнер таким же образом:

$output = shell_exec('docker run hello-world'); 

Кажется, что я не мог запустить ЛЮБОЙ docker cmd через php.

Как это правильно?

+0

Вы используете PHP за пределами контейнера? –

+0

Да. Я пытаюсь запустить его из веб-браузера на хосте. – YasiuMaster

+0

Что находится в вашем контейнере? Это веб-сервер? Если это так, не будет возможности увидеть вывод в браузере из-за конфликтов портов между прочим. –

ответ

2

Вы можете сделать это:

vi rd.php 

Поместите этот контент в rd.php файл

<?php 
$output = shell_exec('RET=`docker run hello-world`;echo $RET'); 
echo $output; 

Теперь вы можете запустить

php rd.php 

Вы можете просмотреть результат:

Hello from Docker. This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (Assuming it was not already locally available.) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash For more examples and ideas, visit: http://docs.docker.com/userguide/ 

Вот и все!

Я надеюсь, что это поможет вам

+0

Да, это работает, но только если я запускаю его в консоли. Когда я пытаюсь запустить его в своем браузере, я не вижу результатов вывода. – YasiuMaster

+0

Возможно, проблема с безопасностью работает внутри WEB-страницы. –

+0

Я почти нашел решение. Я изменил файл sudoers (sudo visudo), добавив в конце: www-data ALL = NOPASSWD: ALL. Теперь PHP запускает мои команды докеров. Я знаю, что это опасно, но если я его поменю на: www-data ALL = NOPASSWD:/usr/bin/php,/usr/bin/php5 Он по-прежнему не работает. Еще одна идея? (http://unix.stackexchange.com/questions/115054/php-shell-exec-permission-on-linux-ubuntu) – YasiuMaster

3

я сделал следующее, чтобы получить эту работу:

  1. Создано PHP файл с именем index.php на /вар/WWW/HTML/ с это содержание:

    <?php 
        echo '<pre>'; 
        $content = system('sudo docker images', $ret); 
        echo '</pre>'; 
    ?> 
    
  2. EDITED sudoers файл с visudo, добавив следующую строку в конце:

    www-data ALL=NOPASSWD: /usr/bin/docker 
    
  3. Проверено http://localhost/index.php и это сработало!

enter image description here

Вы даже можете создавать и запускать контейнеры с этим, надеюсь, что он работает для вас.