У меня есть проект PHP Laravel.Я новичок в Docker.
У меня есть Dockerfile, созданный из образа php-apache, который сначала устанавливает некоторые пакеты php, php composer, копирует все файлы из моего проекта в папку apache образа docker и сюда... как вы можете видеть ниже (см. Dockerfile) У меня есть RUN composer install --optimize-autoloader --no-dev; \ ...
, несколько строк команд php artisan.По какой-то неизвестной причине они не работают должным образом.
Когда я делаю docker-compose up -d
, php artisan key:generate --force
(см. Файл Docker) не добавляет значение к APP_KEY
в файле .env
вобраз докера (я проверял это с docker exec -it IMAGE_ID bash && cat .env
после того, как образ был собран и запущен).Хотя это говорит Ключ приложения установлен успешно .
Кроме того, php artisan migrate
не удается перенести таблицы, он говорит:
In Connection.php line 664:
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_s
chema.tables where table_schema = homestead and table_name = migrations)
In Connector.php line 70:
SQLSTATE[HY000] [2002] Connection refused
Но ... после образасобран и запущен, я делаю логин для его bash -> docker exec -it IMAGE_ID bash
, затем я делаю php artisan migrate
, и он успешно переносит все таблицы.Это так странно ..
Не могли бы вы помочь мне выяснить, почему Docker не может:
- создать ключ приложения?
- выполнить миграцию?
Это мой Dockerfile
:
FROM php:7.2-apache
RUN apt-get update; \
apt-get install -y zlib1g-dev git zip unzip; \
docker-php-ext-install zip pdo_mysql;
COPY --from=composer:1.7.3 /usr/bin/composer /usr/bin/composer
WORKDIR /var/www
COPY ./ ./
COPY .env.example .env
COPY apache-config.conf /etc/apache2/sites-available/000-default.conf
RUN composer install --optimize-autoloader --no-dev; \
php artisan key:generate --force; \
php artisan migrate; \
php artisan db:seed; \
php artisan cache:clear; \
php artisan config:cache; \
php artisan route:cache; \
php artisan storage:link; \
chown -R www-data:www-data /var/www;
CMD ["apache2ctl", "-D" , "FOREGROUND"]
Мой apache-config.conf
:
ServerName localhost
<VirtualHost *:80>
ServerAdmin beqalomadze@gmail.com
ServerName localhost
DocumentRoot /var/www/public
<Directory /var/www/public>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order deny,allow
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Мой docker-compose.yml
version: '3'
services:
mysql:
image: mysql:5.7
environment:
MYSQL_DATABASE: posts
MYSQL_ROOT_PASSWORD: root
volumes:
- "./data/mysql:/var/lib/mysql"
app:
depends_on:
- mysql
build:
context: ./
dockerfile: Dockerfile
volumes:
- "./data/storage-app:/var/www/storage/app"
ports:
- 3030:80
Мой .env.example
:
...
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=posts
DB_USERNAME=root
DB_PASSWORD=root
...