加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

未在管理器节点中运行时,Docker服务laravel应用程序未运行

发布时间:2020-12-16 03:34:45 所属栏目:安全 来源:网络整理
导读:泊坞窗,compose.yml 这是我的docker-compose文件,用于使用docker-stack在多个实例中部署服务.正如您所看到的那样,应用程序服务是在2个节点中运行的laravel和其中一个节点中的数据库(mysql). 完整代码库: https://github.com/taragurung/Ci-CD-docker-swarm

泊坞窗,compose.yml
这是我的docker-compose文件,用于使用docker-stack在多个实例中部署服务.正如您所看到的那样,应用程序服务是在2个节点中运行的laravel和其中一个节点中的数据库(mysql).

完整代码库:
https://github.com/taragurung/Ci-CD-docker-swarm

version: '3.4'
networks:
  smstake:   
    ipam:
      config:
        - subnet: 10.0.10.0/24

services:
    db:
        image: mysql:5.7
        networks:
          - smstake
        ports:
          - "3306"
        env_file:
          - configuration.env
        environment:
          MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
          MYSQL_DATABASE: ${DB_NAME}
          MYSQL_USER: ${DB_USER}
          MYSQL_PASSWORD: ${DB_PASSWORD}
        volumes:
          - mysql_data:/var/lib/mysql
        deploy:
          mode: replicated
          replicas: 1

    app:
        image: SMSTAKE_VERSION
        ports:
          - 8000:80
        networks:
          - smstake
        depends_on:
          - db
        deploy:
          mode: replicated
          replicas: 2

我面临的问题.
1.虽然在检查服务日志时服务处于运行状态,但我可以看到仅在一个节点中成功迁移而在另一个节点中没有运行.请参阅下面的日志

>当我使应用程序服务仅在管理器节点中运行限制时,应用程序运行良好.我可以登录页面并执行所有操作但是当我使用复制品在任何节点中运行应用程序服务时,登录页面显示但是当尝试登录时重定向到NOT FOUND页面

尝试在3个节点上运行时,这是完整日志. Bellow是在2个节点上运行时的示例.您可以详细了解迁移问题
https://pastebin.com/wqjxSnv2

使用泊坞窗服务日志检查服务日志< smstake_app>

| Cache cleared successfully.
    | Configuration cache cleared!
    | Dropped all tables successfully.
    | Migration table created successfully.
    | 
    | In Connection.php line 664:
    |                                                                                
    |   SQLSTATE[42S02]: Base table or view not found: 1146 Table 'smstake.migratio  
    |   ns' doesn't exist (SQL: insert into `migrations` (`migration`,`batch`) val  
    |   ues (2014_10_12_100000_create_password_resets_table,1))                     
    |                                                                                
    | 
    | In Connection.php line 452:
    |                                                                                
    |   SQLSTATE[42S02]: Base table or view not found: 1146 Table 'smstake.migratio  
    |   ns' doesn't exist                                                            
    |                                                                                
    | 
    | Laravel development server started: 

I don’t know if its due to migration problem or what. Sometime I can
login and after few time I get redirected to Not found page again when
clicking on the link inside dashboard.

enter image description here

最佳答案
所以我运行了你的服务,发现了一些问题.

> mysql中docker-compose.yml中的用户不同.这可能仅仅是为了发布目的
>在Dockerfile中,您使用了ENTRYPOINT,这也导致在迁移服务上运行相同的命令.我把它改成了CMD
>您没有在与mysql数据库相同的网络中运行迁移服务.所以mysql无法从同一个地方访问.

这是我使用的最终撰写文件

泊坞窗,compose.yml

version: '3.4'

networks:
  smstake:


services:
    db:
        image: mysql:5.7
        networks:
          - smstake
        ports:
          - "3306"
        environment:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: smstake
          MYSQL_USER: tara
          MYSQL_PASSWORD: password
        volumes:
          - mysql_data:/var/lib/mysql
        deploy:
          mode: replicated
          replicas: 1
          placement:
            constraints:
              - node.role == manager


    app:
        image: 127.0.0.1:5000/myimage:latest
        ports:
          - 8000:80
        networks:
          - smstake
        depends_on:
          - db
          - migration
        deploy:
          mode: replicated
          replicas: 3

    migration:
        image: 127.0.0.1:5000/myimage:latest
        command: sh -xc "sleep 10 && pwd && php artisan migrate:fresh 2>&1"
        networks:
          - smstake
        depends_on:
          - db
        deploy:
          restart_policy:
            condition: on-failure
          mode: replicated
          replicas: 1
          placement:
            constraints:
              - node.role == manager


volumes:
    mysql_data:

Dockerfile

FROM alpine

ENV 
  APP_DIR="/project" 
  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

RUN mkdir /apps
COPY ./project /apps
RUN cd /apps && composer install

WORKDIR /apps

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

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

然后再次运行该服务.然后迁移就好了

Migration

该应用程序也工作

App Working

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读