Доступ к файлам внутри док-контейнера через переполнение стека

У меня есть сервер jboss на докере, и я пытаюсь проверить php, сохранен ли аудиофайл или нет. Если файл существует, я хотел бы скопировать его на локальный компьютер.

  $location = shell_exec('docker exec -it  name3 /bin/bash -c cd .**********; ls');
$filepath = $location;
if (file_exists($filepath)) {
//copy that file to local machine
}
echo $filepath;

но за $ location я получаю папки внутри htdocs (xampp). Можно ли получить доступ к файлам внутри Docker-контейнера через php (который находится на локальном сервере)?

0

Решение

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

docker cp <containerId>:/file/path/within/container /host/path/target

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

docker ps
1

Другие решения

Если я правильно понимаю, PHP работает на вашем локальном компьютере, и вы хотите проверить, существует ли файл в работающем Docker-контейнере.

Независимо от того, имеет ли PHP доступ к той части файловой системы, которая находится за пределами корня документа, или имеет ли он разрешение на выполнение команд оболочки (обе проблемы безопасности), я все равно использовал бы другой подход.

  • Использовать объем докера для хранения записей.
  • Смонтируйте том на пути, который вы проверяете, т.е. /opt/Restcomm-JBoss-AS7/standalone/deployments/restcomm.war/recordings/
  • Установите путь хоста вашего тома докера где-нибудь, где PHP имеет доступ для чтения в файловой системе
  • Используйте PHP, чтобы проверить, существует ли файл, без использования команд оболочки. например https://secure.php.net/manual/en/function.file-exists.php

Обратите внимание, что таким образом ваши записи будут также упорствовать через перезапуски / сбои контейнера Docker, что, я думаю, важно …

0

По вопросам рекламы [email protected]