当前位置: 首页 > 知识库问答 >
问题:

对接2个独立的依赖服务

黄飞翮
2023-03-14

我目前有一个运行2个服务的VM。一个前端HTTPD/Apache2服务,它将所有请求代理给我的后端服务。

我的bankend服务仅侦听127.0.0.1:7878。这意味着它只能通过localhost访问。这就是Im使用前端的原因,这样我就可以使用它代理我的请求到127.0.0.1:7878

因此我在VM上的apache2配置如下所示:

root@vm:/etc/apache2/sites-enabled# cat backend.conf
<VirtualHost *:443>

    ServerName my.domain.com
    ProxyPass / http://localhost:7878/
    ProxyPassReverse / http://localhost:7878/

    SSLEngine On
    SSLCertificateFile    /etc/apache2/ssl/ssl_cert.crt
    SSLCertificateKeyFile /etc/apache2/ssl/ssl_cert.key

</VirtualHost>
version: '3'
services:
  backend:
    build: backend/.
    ports:
     - "7878:7878"

现在我也需要对接前端服务。它可能是apache,甚至可能是Nginx。但如果我的后端服务只侦听127.0.0.1,我不确定这两个容器将如何相互交互

如果我扩展我的docker-compose文件,如下所示:

version: '3'
    services:
      backend:
        build: backend/.
        ports:
         - "7878:7878"
      frontend:
        build: frontend/.
        ports:
         - "80:80"
         - "443:443"

我相信它会扩展自己的网络,而使用127.0.0.1:7878将无法访问我的后端服务

共有1个答案

商和颂
2023-03-14

您不能像描述的那样做到这一点:IPv4地址127.0.0.1是一个神奇的地址,它总是意味着“我”,而在Docker上下文中,它将意味着“这个容器”。

为您的容器建立一个专用的Docker-内部网络很容易;事实上,Docker Compose会自动为您做这件事。您的后端服务必须监听0.0.0.0才能从其他容器访问。但是,您不需要在容器上设置外部发布的端口:(或者使用Docker run-p选项)。如果不这样做,则容器只能从同一Docker内部网络上的其他容器访问,使用docker-compose.yml文件中的服务名称作为DNS名称,无论容器中的进程正在监听的端口是什么。

这方面的一个最小示例如下:

version: '3'
services:
  proxy:
    image: 'my/proxy:20181220.01'
    environment:
      BACKEND_URL: 'http://backend'
      BIND_ADDRESS: '0.0.0.0:80'
    ports:
      - '8080:80'
  backend:
    image: 'my/backend:20181220.01'
    environment:
      BIND_ADDRESS: '0.0.0.0:80'
 类似资料:
  • Flask-SocketIO兼容python2.7和python3.3+。这个异步的服务的包的依赖可以有三个选择: eventlet:这是最好的选择,支持长连接(long-polling)和websocket传输。 gevent: 支持许多不同的配置,长连接传输是完全支持的,但是不同于eventlet,gevent并没有原生支持websocket。添加websocket(功 能)有两种方法:gev

  • 我目前在一个项目中工作,该项目包括大约12个子项目。 每个子项目都包含一个POM,该POM单独构建依赖关系。 上游子项目包括下游子项目作为依赖项,其方式与包含对log4j: 这似乎对我们管用。 然而,今天,经过11个月的开发,我决定重温这十几个POM文件,并考虑到重构。 我随后发现了和标记,并开始怀疑我的Maven项目策略是否“正确”。 重构我的POM,使最上层的POM(一个Web WAR项目)变

  • 在META-INF/MANIFEST.MF中,我添加了一个“class-path”语句,以标准的方式定义依赖关系:

  • 主要内容:独立服务的启动管理,独立服务的自启动管理我们知道,RPM 包默认安装的服务分为独立的服务和基于 xinetd 的服务,本节来学习独立服务的管理。 独立服务的启动管理 独立的服务要想启动,主要有两种方法。 1) 使用/etc/init.d/目录中的启动脚本来启动独立的服务 既然所有独立服务的启动脚本都存放在 /etc/init.d/ 目录中,那么,调用这些脚本就可以启动独立的服务了。这种启动方式是推荐启动方式,命令格式如下: [root@

  • 问题内容: 我在这里有一个界面 这是一种实现 并且有一类依赖于Idemo 现在说我要测试Sample类 这里没有创建Sample实例,并且s保持为null。我想这是因为当执行到达指定绑定的行时,已经创建了该测试类。但是我不确定。使用Spring Autowired而不是jersey CDI相同的作品 如果Sample是资源/控制器类,那么测试框架可以创建它的实例而无需注入它,但是是否可以使用Jer

  • 我有两种服务a.service和b.service。a、 显示服务 b、 服务 现在,当我开始b.service,我确信a.service将被启动。在运行时,突然有人扰乱 /home/admin/run.sh和systemd无法启动a.service(也是systemctl状态a.service显示为状态失败)。现在有一个选项,b.service可以知道a.service失败,它应该停止/退出吗?