我有3个Docker容器,一个运行nginx,另一个运行php,还有一个运行hashicorp的serf。
我想使用php exec函数调用serf二进制文件来触发一个serf event
在我的码头作文中,我写了
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我想象我会做一些类似于php exec('serf serf event "test"')的事情,其中serf是容器的主机名。
或者也许有人可以给出一个想法,如何使用替代方法来设置这样的东西?
发布于 2016-09-20 01:20:07
“链接”容器允许容器之间的网络级发现。对于docker网络,链接的功能现在被认为是遗留的,不再被真正推荐。要在另一个容器中运行命令,您需要在目标容器上打开网络应用程序接口功能(例如,对目标容器的基于REST的http请求),或者需要将主机暴露给源容器,以便它可以对目标容器运行docker exec。
后者要求您在源容器中安装docker客户端,然后使用主机上的开放端口或在容器中挂载/var/run/docker.sock来公开服务器。由于这允许容器在主机上具有root访问权限,因此对于管理容器以外的任何其他容器,建议不要采用这种做法,否则您将信任直接在主机上运行的代码。
我能想到的唯一其他选择是消除具有共享卷的容器之间的隔离。
理想的解决方案是使用消息队列服务,该服务允许多个工作进程以自己的速度启动并处理请求。源容器向队列发送请求,目标容器在运行时侦听请求。这也允许系统即使在工作人员当前处于停机状态时也能继续工作,活动只是排队。
https://stackoverflow.com/questions/39577924
复制相似问题