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

设置:

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

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

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

问题:

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

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

题:

是否有可能从一个地方访问必要的脚本( gulpphp artisannpmcomposer等),无论是主机还是其他容器?

可能的scheme

我想添加另一个容器,将安装所有的引擎(PHP和nodejs),所以我可以SSH或docker exec进入该容器,并运行任何必要的。 如果这是唯一可能的解决scheme,这听起来不错,但我想探索的选项。


文件:

泊坞窗,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通过容器名执行所有的命令。