web-dev-qa-db-fra.com

Où placer la commande php artisan migrate

Essayer de déployer l'application laravel sur la pile docker. Ce que je suis confus ou incapable de comprendre, c'est où puis-je exécuter cette migration php artisan: frais pour générer les tables requises dans mysql.

Les services et la tâche fonctionnent bien

docker-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:

Voici le dockerfile avec lequel l'image est générée

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

J'ai essayé d'ajouter au Dockerfile tel que commenté mais n'a pas résolu le problème

J'ai essayé d'ajouter sur docker-compose comme commande: php artisan migrate: fresh too

Auparavant, cela faisait dans jenkins pour le faire fonctionner maintenant ne le veux pas via jenkins

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

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

C'est ainsi que je l'ai résolu .Création d'un script bash appelé run.sh et ajout des commandes php artisan migrations suivies de la commande php serve.

run.sh

#!/bin/sh

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

Ajout de point d'entrée au Dockerfile supprimant le CMD à la fin qui exécutera les commandes souhaitées.

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

Supprimez la commande du docker-compose.yml

8
Tara Prasad Gurung