web-dev-qa-db-ja.com

php artisan migrateコマンドを置く場所

laravel application on docker stack。

サービスとタスクは正常に実行されています

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:

これは画像が生成されるdockerfileです

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

以前はjenkinsでこれを機能させるためにこれを行っていましたが、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

これが私がそれを解決した方法です。run.shと呼ばれるbashスクリプトを作成し、php artisan migrationsコマンドに続いてphp serveコマンドを追加しました。

run.sh

#!/bin/sh

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

最後に[〜#〜] cmd [〜#〜]を削除してentrypointをDockerfileに追加し、目的のコマンドを実行します。

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

Docker-compose.ymlからコマンドを削除します

8