首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在docker中的链接容器上执行二进制

在docker中的链接容器上执行二进制
EN

Stack Overflow用户
提问于 2016-09-20 00:33:31
回答 1查看 880关注 0票数 3

我有3个Docker容器,一个运行nginx,另一个运行php,还有一个运行hashicorp的serf

我想使用php exec函数调用serf二进制文件来触发一个serf event

在我的码头作文中,我写了

代码语言:javascript
复制
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是容器的主机名。

或者也许有人可以给出一个想法,如何使用替代方法来设置这样的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-20 01:20:07

“链接”容器允许容器之间的网络级发现。对于docker网络,链接的功能现在被认为是遗留的,不再被真正推荐。要在另一个容器中运行命令,您需要在目标容器上打开网络应用程序接口功能(例如,对目标容器的基于REST的http请求),或者需要将主机暴露给源容器,以便它可以对目标容器运行docker exec

后者要求您在源容器中安装docker客户端,然后使用主机上的开放端口或在容器中挂载/var/run/docker.sock来公开服务器。由于这允许容器在主机上具有root访问权限,因此对于管理容器以外的任何其他容器,建议不要采用这种做法,否则您将信任直接在主机上运行的代码。

我能想到的唯一其他选择是消除具有共享卷的容器之间的隔离。

理想的解决方案是使用消息队列服务,该服务允许多个工作进程以自己的速度启动并处理请求。源容器向队列发送请求,目标容器在运行时侦听请求。这也允许系统即使在工作人员当前处于停机状态时也能继续工作,活动只是排队。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39577924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档