Вы можете иметь только одно базовое изображение, используя FROM
в Dockerfile. По сути, это говорит докеру, с чего начать. В вашем случае у вас есть несколько FROM
с, поэтому кажется, что Docker просто берет последний, который вы ему дали, в данном случае node:8
. Так что PHP никогда не устанавливается.
Чтобы решить эту проблему, вам нужно выбрать один базовый образ (например, php) и установить поверх него другие зависимости, чтобы вы могли вручную установить nginx и узел поверх изображения php, используя RUN
. Вы также можете рассмотреть возможность создания отдельного изображения nginx. Это считается хорошей практикой по возможности разделять ваши сервисы на разные изображения.
Кроме того, вместо нескольких записей CMD
используйте небольшой сценарий оболочки запуска. Например
#!/usr/bin/env bash
set -e
php artisan migrate:fresh --seed
php artisan config:cache
php artisan route:cache
exec php artisan serve --host=0.0.0.0 --port=436
Поместите это в скрипт с именем start.sh
или что-то в этом роде, затем в вашем Dockerfile используйте
CMD ["./start.sh"]
Тогда, возможно, вы также захотите запустить второй контейнер для службы nginx. Вы можете сделать это вручную с помощью Docker Run, но я предлагаю проверить docker-compose. Он помогает вам создавать и запускать несколько контейнеров одновременно.