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

时间:2016-10-20 02:27:28

标签: laravel docker docker-compose

环境:

我使用docker-compose创建一组类似于Laravel Homestead环境的容器,当然可以根据我的需要进行调整。所以我有以下容器:

  • nginx的
  • php_fpm
  • php_queue
  • app [数据容器]
  • MySQL的
  • 套接字[运行websocket服务器的nod​​ejs容器]
  • redis的

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

问题:

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

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

问题:

是否可以从一个地方(无论是主机还是主机)访问必要的脚本(gulpphp artisannpmcomposer等)另一个容器?<​​/ p>

可能的解决方案:

我想添加另一个安装了所有引擎的容器(PHP和nodejs),所以我可以SSH或docker exec进入该容器并运行任何必要的东西。如果那是唯一可行的解​​决方案,那听起来也不错,但我想探索各种选择。

文件:

搬运工-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

1 个答案:

答案 0 :(得分:1)

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