【发布时间】:2016-10-20 02:27:28
【问题描述】:
设置:
我使用 docker-compose 创建了一组类似于Laravel Homestead 环境的容器,当然会根据我的需要进行调整。所以我有以下容器:
- nginx
- php_fpm
- php_queue
- app [数据容器]
- mysql
- sockets [运行 websocket 服务器的 nodejs 容器]
- redis
[我将在下面发布 docker-compose.yml]
问题:
如您所见,我这里有很多相互通信的容器,有时我需要在它们中运行命令。例如,有时我需要在php_queue 容器中运行php artisan ... 命令或在nodejs 容器中运行gulp。
所以我现在要做的是docker exec 进入每个容器,然后运行必要的命令。但这很烦人,因为我必须不断在 PHP 和 JS 容器之间切换,很容易混淆它们。
问题:
是否可以从一个地方访问必要的脚本(gulp、php artisan、npm、composer 等),无论是主机还是另一个容器?
可能的解决方案:
我想添加另一个容器来安装所有引擎(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
【问题讨论】:
标签: laravel docker docker-compose