laravel - 如何从一个地方访问不同Docker容器中的脚本?

标签 laravel docker docker-compose

设置:

我使用docker-compose创建了一组类似于Laravel Homestead环境的容器,当然可以使其适应我的需求。所以我有以下容器:

  • nginx
  • php_fpm
  • php_queue
  • 应用程序[数据容器]
  • mysql
  • 套接字[运行websocket服务器的nod​​ejs容器]
  • redis

  • [我将在下面发布docker-compose.yml]

    问题:

    如您所见,我这里有很多容器可以互相通信,有时我需要在其中运行命令。例如,有时我需要在php artisan ...容器中运行php_queue命令或在nodejs容器中运行gulp

    所以我现在要做的是将docker exec放入每个容器中,然后运行必要的命令。但这很烦人,因为我必须不断在PHP和JS容器之间切换,并且很容易混淆它们。

    题:

    是否可以从一个位置访问主机或其他容器上的必要脚本(gulpphp artisannpmcomposer等)?

    可能的解决方案:

    我想到要添加另一个将安装所有引擎(PHP和nodejs)的容器,因此我可以在该容器中使用SSH或docker exec并运行任何必要的东西。如果那是唯一可能的解决方案,那听起来也不错,但我想探索这些选项。

    文件:

    docker-compose.yml
    version: '2'
    
    services:
        nginx:
            build: ./nginx/
            ports:
                - 80:80
                - 443:443
            depends_on:
                - php_fpm
                - sockets
            links:
                - php_fpm
                - sockets
            volumes_from:
                - app
    
        php_fpm:
            build:
                context: ./php/
            expose:
                - 9000
            links:
                - mysql
                - redis
            volumes_from:
                - app
    
        php_queue:
            build:
                context: ./php/
            links:
                - mysql
                - redis
            volumes_from:
                - app
            command: "php /var/www/koodzo/artisan queue:work --daemon"
    
        app:
            image: php:7.0-fpm
            volumes:
                - ../Sources:/var/www/koodzo
            command: "true"
    
        mysql:
            image: mysql:5.7
            ports:
                - 3306:3306
            volumes:
                - ../Database:/var/lib/mysql
            environment:
                MYSQL_ROOT_PASSWORD: secret
                MYSQL_DATABASE: koodzo
                MYSQL_USER: homestead
                MYSQL_PASSWORD: secret
    
        sockets:
            build: ./sockets
            expose:
                - 6001
            volumes_from:
                - app
            command: "node /var/www/koodzo/sockets/server.js"
    
        redis:
            image: redis:3.2
            expose:
                - 6379
    

    最佳答案

    您知道可以使用exec实际运行命令吗?这样,您只需在docker-compose.yml中命名不同的容器,然后运行一个使用docker exec的脚本即可按容器名称执行所有命令。

    关于laravel - 如何从一个地方访问不同Docker容器中的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40144444/

    相关文章:

    docker - docker 如何缓存图像数据?

    php - 拉维尔 5 : adding custom styles/scripts

    与缺少扩展相关的 PHP 错误/异常处理

    laravel - if else 路由 laravel 中的条件

    Amazon-ECS 中的 Docker 化 Consul、Zookeeper 和 Kafka

    docker - 在路径中找不到容器 - DOCKER

    docker - 带有 dockerization 的 Nexus 存储库配置

    docker - Rocketchat 安装向导挂起

    laravel - 减少 Laravel 5.8 的 Docker 镜像大小

    docker 错误 : Service 'app' failed to build