Возникла потребность из хост-системы обращаться к php-интерпретатору, находящемуся внутри docker-контейнера (т.к. не хочу в хост-систему устанавливать php по ряду причин). В итоге интерпретатор запускаю как-то так (из хост-системы обращаюсь к контейнеру):
cat script.php | docker exec -i php_container_name php -- --param1=value1
Проблема в том, что этот скрипт должен работать с бинарными данными, подаваемыми ему на вход (а сейчас туда уходит, собственно, сам код скрипта). И непонятно, куда их теперь подавать.
С моей стороны было два соображения:
- Использовать named pipe, имя которого передать аргументом в php-скрипт:
cat script.php | docker exec -i php_container_name php -- --param1=value1 pipe-name="/path/to/file"
…И внутри скрипта читать уже содержимое этого пайпа. Идея, наверное, рабочая, но тогда между контейнером и системой нужно шарить этот файл - лишняя операция. И не факт ещё, что данные корректно полетят из системы в контейнер (не знаю, будет это работать или нет, но, судя по тому, что сокеты работают, то и named pipe должен заработать).
- Передавать данные в 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>&-
Предпочтителен второй вариант, но не могу понять, как это пишется.