LINUX.ORG.RU

php command line: код и данные из standard input

 ,


0

1

Возникла потребность из хост-системы обращаться к php-интерпретатору, находящемуся внутри docker-контейнера (т.к. не хочу в хост-систему устанавливать php по ряду причин). В итоге интерпретатор запускаю как-то так (из хост-системы обращаюсь к контейнеру):

cat script.php | docker exec -i php_container_name php -- --param1=value1

Проблема в том, что этот скрипт должен работать с бинарными данными, подаваемыми ему на вход (а сейчас туда уходит, собственно, сам код скрипта). И непонятно, куда их теперь подавать.

С моей стороны было два соображения:

  1. Использовать named pipe, имя которого передать аргументом в php-скрипт:
cat script.php | docker exec -i php_container_name php -- --param1=value1 pipe-name="/path/to/file"

…И внутри скрипта читать уже содержимое этого пайпа. Идея, наверное, рабочая, но тогда между контейнером и системой нужно шарить этот файл - лишняя операция. И не факт ещё, что данные корректно полетят из системы в контейнер (не знаю, будет это работать или нет, но, судя по тому, что сокеты работают, то и named pipe должен заработать).

  1. Передавать данные в php-скрипт через дескриптор 3. Изнутри php-скрипта я понимаю, как их прочитать. Но не понимаю, как корректно составить команду, которая будет писать данные в php. Ну то есть я хотел бы что-то вроде такого:
#!/bin/bash
exec 3> >(docker exec -i php_container_name php -- --param1=value1)
cat ./script.php >&3
# тут мне надо как-то открыть дескриптор 3 php-процесса для записи и передать в него данные
exec 3>&-

Предпочтителен второй вариант, но не могу понять, как это пишется.

запусти докер в докере и как бы из внутреннего докера шли бинарные данные во внешний докер, и хорошо бы все это обернуть общим докером

Anoxemian ★★★★★ ()
Ответ на: комментарий от Anoxemian

Не понял вашего намёка и сарказма. У меня только один контейнер, с которым я взаимодействую.

Novascriptum ()

Пробовал вот так:

cat ./script.php >&3 3< echo -e "line1\nline2"

Но в третий дескриптор так не работает, «echo» воспринимается как путь к файлу.

Novascriptum ()

Прекращай уже этот мазохизм с докером и файловыми дескрипторами, уже две недели страдаешь. Докер вообще выкинь. Перед использованием дескрипторов изучи наконец что такое пайп и вообще принципы ввода/вывода в юниксах.

man 2 open
man 2 dup2
man 2 pipe
firkax ★★ ()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Я не две недели страдаю, это всё разные задачи, предыдущие решены успешно)

Novascriptum ()

Засунуть пхп скрипт в докер?

goingUp ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.