Eli*_*Eli 3 docker docker-compose
我有 3 个 Docker 容器,一个正在运行nginx,另一个正在运行,一个由 hashcorpphp运行。serf
我想使用 phpexec函数调用serf二进制文件来触发serf event
在我的 docker compose 中我写了
version: '2'
services:
web:
restart: always
image: `alias`/nginx-pagespeed:1.11.4
ports:
- 80
volumes:
- ./web:/var/www/html
- ./conf/nginx/default.conf:/etc/nginx/conf.d/default.conf
links:
- php
environment:
- SERVICE_NAME=${DOMAIN}
- SERVICE_TAGS=web
php:
restart: always
image: `alias`/php-fpm:7.0.11
links:
- serf
external_links:
- mysql
expose:
- "9000"
volumes:
- ./web:/var/www/html
- ./projects:/var/www/projects
- ./conf/php:/usr/local/etc/php/conf.d
serf:
restart: always
dns: 172.17.0.1
image: `alias`/serf
container_name: serf
ports:
- 7496:7496
- 7496:7496/udp
command: agent -node=${SERF_NODE} -advertise=${PRIVATE_IP}:7496 -bind=0.0.0.0:7496
Run Code Online (Sandbox Code Playgroud)
我想象我会在 php 中执行类似的操作,exec('serf serf event "test"')其中serf是容器的主机名。
或者也许有人可以提供如何使用替代方法进行类似设置的想法?
“链接”容器允许容器之间的网络级发现。对于 docker 网络,链接功能现在被认为是遗留的,并且不再真正推荐。要在另一个容器中运行命令,您需要在目标容器上打开网络 API 功能(例如,向目标容器发出基于 REST 的 http 请求),或者需要将主机公开给源容器,以便可以docker exec针对目标容器运行。
后者要求您在源容器中安装 docker 客户端,然后通过主机上的开放端口或/var/run/docker.sock在容器中安装来公开服务器。由于这允许容器在主机上具有根访问权限,因此对于管理容器以外的任何其他容器,不建议这样做,否则您会信任直接在主机上运行的代码。
我能想到的唯一其他选择是消除具有共享卷的容器之间的隔离。
理想的解决方案是使用消息队列服务,该服务允许多个工作人员按照自己的节奏启动和处理请求。源容器向队列发送请求,目标容器在运行时监听请求。这也使得系统即使在工作人员当前停机时也能继续运行,活动只需排队即可。
| 归档时间: |
|
| 查看次数: |
1156 次 |
| 最近记录: |