#php #laravel #docker
#php #laravel #docker
Вопрос:
Это вывод команды:
Step 5/7 : RUN ./vendor/bin/laravel new --force testapp
---> Running in dc92e378b12a
Crafting application...
[91m
[0m[91mIn Process.php line 1062:
TTY mode requires /dev/tty to be read/writable.
new [--dev] [--force] [--] [<name>]
[0mService 'cli' failed to build: The command '/bin/sh -c ./vendor/bin/laravel new --force testapp' returned a non-zero code: 1
[Pipeline] }
Это мой файл Docker:
$ cat Dockerfile.cli
FROM php:7.2-cli
COPY composer.json /app/
COPY scripts /app/scripts
RUN composer install --no-dev
RUN ./vendor/bin/laravel new --force testapp
# Define where the Drupal Root is located
ENV WEBROOT=web
Как я могу автоматически создать образ Laravel с определенным набором установленных пакетов для проведения некоторого тестирования?
Комментарии:
1. lucky laravel ориентирована на предоставление пользователям необходимой информации. Просто подумайте, как такая ошибка — как в этом вопросе — остановила бы те действия, которые полагаются на слепое использование своей чрезмерно сложной структуры, фактически не зная, что делается за сценой. …. Я столкнулся с той же ошибкой, и это заставило меня понять, насколько недружелюбен этот laravel в отношении автономии пользователя. Почему вы решили установить laravel внутри контейнера docker, это из-за миллиардов практически недоступных для проверки кодов, которые он загружает и которым почти нельзя доверять?
Ответ №1:
Единственное решение, которое, как я обнаружил, работает нормально, — отказаться от laravel
команды и сделать это с composer
:
RUN composer create-project --prefer-dist laravel/laravel testapp
.
Комментарии:
1. есть идеи, почему команда OP не удалась? Какое отношение к этому имеет телетайп? Самое главное, видите ли вы какую-либо разницу между вашей альтернативной командой и командой OP (кроме, конечно, того, что оригинал не работает внутри docker)? Я имею в виду разницу в отношении результата настройки нового laravelproject?
2. Потратил часы, пытаясь понять, что было не так. Это сработало. Надо было попробовать, когда я увидел это в инструкции. Очень странная ошибка.
Ответ №2:
Перед запуском
RUN ./vendor/bin/laravel new --force testapp
включите эту строку:
RUN sed -i "s/$process->setTty(true);///$process->setTty(true);/g" ./vendor/laravel/installer/src/NewCommand.php
Создание файла Dockerfile выглядит следующим образом
FROM php:7.2-cli
COPY composer.json /app/
COPY scripts /app/scripts
RUN composer install --no-dev
RUN sed -i "s/$process->setTty(true);///$process->setTty(true);/g" ./vendor/laravel/installer/src/NewCommand.php
RUN ./vendor/bin/laravel new --force testapp
# Define where the Drupal Root is located
ENV WEBROOT=web