laravel — Куда положить команду php artisan migrate

Попытка развернуть приложение laravel в стеке докера. Что я
смущен или не в состоянии понять, где я могу запустить этот мастер PHP
migrate: fresh для генерации таблиц, необходимых в mysql.

Услуги и задачи выполняются хорошо

докер-compose.yml

version: '3.3'

networks:
smstake:
ipam:
config:
- subnet: 10.0.10.0/24

services:

db:
image: mysql:5.7
networks:
- smstake
ports:
- "3306:3306"volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: smstake
MYSQL_USER: root
MYSQL_PASSWORD: password
deploy:
mode: replicated
placement:
constraints:
- node.role == manager
app:

image: smstake:latest
ports:
- 8000:80
networks:
- smstake

command: docker-compose exec app php artisan migrate --seed
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
volumes:
db_data:

Вот докер-файл, с помощью которого генерируется изображение

FROM alpine

ENV \
APP_DIR="/app" \
APP_PORT="80"
# the "app" directory (relative to Dockerfile) containers your Laravel app...
COPY app/ $APP_DIR
# or we can make the volume in compose to say use this directory

RUN apk update && \
apk add curl \
php7 \
php7-opcache \
php7-openssl \
php7-pdo \
php7-json \
php7-phar \
php7-dom \
php7-curl \
php7-mbstring \
php7-tokenizer \
php7-xml \
php7-xmlwriter \
php7-session \
php7-ctype \
php7-mysqli \
php7-pdo \
php7-pdo_mysql\
&& rm -rf /var/cache/apk/*

RUN curl -sS https://getcomposer.org/installer | php -- \
--install-dir=/usr/bin --filename=composer

RUN cd $APP_DIR && composer install

WORKDIR $APP_DIR

RUN chmod -R 775 storage
RUN chmod -R 775 bootstrap

#CMD php artisan migrate:fresh
CMD php artisan serve --host=0.0.0.0 --port=$APP_PORT

Попытка добавления в Dockerfile как прокомментировано, но не решила проблему

Попытка добавления в docker-compose как команда: php artisan migrate: fresh too

Раньше делал это в Дженкинс, чтобы заставить его работать. Теперь не хочу, чтобы через Дженкинс

docker-compose up -d --force-recreate --build

#Running commands on already running service
docker-compose exec -T app php artisan migrate:fresh --seed --force

2

Решение

Вот как я это решил. Создал скрипт bash под названием run.sh и добавили команды миграции php artisan, а затем команду php serve.

run.sh

#!/bin/sh

cd /app
php artisan migrate:fresh --seed
php artisan serve --host=0.0.0.0 --port=$APP_PORT

добавленной точка входа в Dockerfile удаляя CMD в конце которого будут запускаться нужные команды.

copy ./run.sh /tmp
ENTRYPOINT ["/tmp/run.sh"]

Удалить команду из docker-compose.yml

3

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

чтобы выполнить миграцию, вы должны быть внутри вашего контейнера, для этого вам нужно запустить ваши контейнеры с docker-compose up, здесь вы должны быть с терминалом в каталоге, где находится файл ur docker-compose.yml.

после этого и с тем же местом в файле docker-compose.yml запустите этот комманд, чтобы он находился внутри контейнера ur:

docker exec -it name_of_ur_server bash

и когда вы будете внутри вашего контейнера, перейдите к вашему общему приложению внутри контейнера, я думаю, вот приложение так cd app,

после всего этого запуска:

php artisan migrate

-1

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