Tar*_*ung 13 php laravel docker docker-stack
试图在docker stack上部署laravel应用程序。我感到困惑或无法弄清的是,我可以在哪里运行此php artisan migrate:fresh生成mysql中所需的表。
服务和任务运行良好
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:
Run Code Online (Sandbox Code Playgroud)
这是用于生成映像的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
Run Code Online (Sandbox Code Playgroud)
尝试按注释添加到Dockerfile中,但未能解决问题
尝试添加docker-compose作为命令:php artisan migration: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
Run Code Online (Sandbox Code Playgroud)
Tun*_*gac 20
在我看来,创建容器时自动迁移并不是一个好方法。您可以在容器启动后手动使用这一行代码执行此操作;
docker exec your_container_name php artisan migrate
Run Code Online (Sandbox Code Playgroud)
这就是我的解决方法。创建了一个名为run.sh的bash脚本,并添加了php artisan migrations命令和php serve命令。
运行
#!/bin/sh
cd /app
php artisan migrate:fresh --seed
php artisan serve --host=0.0.0.0 --port=$APP_PORT
Run Code Online (Sandbox Code Playgroud)
在Dockerfile中添加了入口点,最后删除了CMD ,它将运行所需的命令。
copy ./run.sh /tmp
ENTRYPOINT ["/tmp/run.sh"]
Run Code Online (Sandbox Code Playgroud)
从docker-compose.yml中删除命令
Tha*_*mer -5
要运行所有迁移,您需要在容器内,为此您需要使用 来运行容器docker-compose up
,这里您需要在 docker-compose.yml 文件所在的目录中使用终端。
之后,在 docker-compose.yml 文件的相同位置,在容器内运行以下命令:
docker exec -it name_of_container bash
Run Code Online (Sandbox Code Playgroud)
当您进入容器内时,请转到容器内的共享应用程序,我认为这是该应用程序cd app
。
运行完所有这些之后:
php artisan migrate
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6054 次 |
最近记录: |