如何从一个地方访问不同Docker容器中的脚本?
设置:
我使用docker-compose来创build一组类似于Laravel Homestead环境的容器,当然也可以根据我的需要进行调整。 所以我有以下容器:
- nginx的
- php_fpm
- php_queue
- 应用程序[数据容器]
- MySQL的
- 套接字[运行websocket服务器的nodejs容器]
- Redis的
[我会发布下面的docker-compose.yml]
问题:
正如你所看到的,我在这里有很多的容器相互交谈,有时我需要在其中运行命令。 例如,有时我需要在php_queue
容器中运行php artisan ...
命令或在nodejs容器中运行gulp。
所以我现在所做的是将docker exec
放入每个容器中,然后运行必要的命令。 但是这非常烦人,因为我不得不在PHP和JS容器之间不停地切换,很容易混淆它们。
题:
是否有可能从一个地方访问必要的脚本( gulp
, php artisan
, npm
, composer
等),无论是主机还是其他容器?
可能的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通过容器名执行所有的命令。
- 如何使Azure虚拟机和configuration容器通过docker CLI / quickstartterminal使用Azure文件存储?
- 如何在RancherOs中安装java
- 在多主机networking上部署springboot cloud netflix是否正确?
- Docker知道在何处从构buildDockerfile的地方拉取.sh脚本?
- 常规帮助:使用node.js构builddocker容器
- 如何将jenkinspipe道作业连接到docker slave容器上的标签
- Docker断开到内部networking的路由
- docker-compose:指定哪个接口将连接到每个networking(当有多个networking时)
- 从Docker Hub提取公共映像是否需要身份validation?