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

连接dockerized apps网络进行api调用

邴越彬
2023-03-14

我设法对接了我们的旧应用程序和更新的应用程序,但现在我需要通过API调用使它们彼此talk

项目:

  • project1=使用project1_appnet(桥驱动程序)
  • project2=使用project2_appnet(桥驱动程序)
  • project3=使用project3_appnet(桥驱动程序)
version: '3'
services:
  app:
    build: ./docker/app
    image: 'cms/app:latest'
    networks:
      - appnet
    volumes:
      - './:/var/www/html:cached'
    ports:
      - '${APP_PORT}:80'
    working_dir: /var/www/html
  cache:
    image: 'redis:alpine'
    networks:
      - appnet
    volumes:
      - 'cachedata:/data'
  db:
    image: 'mysql:5.7'
    environment:
      MYSQL_ROOT_PASSWORD: '${DB_ROOT_PASSWORD}'
      MYSQL_DATABASE: '${DB_DATABASE}'
      MYSQL_USER: '${DB_USER}'
      MYSQL_PASSWORD: '${DB_PASSWORD}'
    ports:
      - '${DB_PORT}:3306'
    networks:
      - appnet
    volumes:
      - 'dbdata:/var/lib/mysql'
networks:
  appnet:
    driver: bridge
volumes:
  dbdata:
    driver: local
  cachedata:
    driver: local

    null
  • 我一直在查看链接,但显然v3不推荐使用它,或者不推荐使用它
  • 尝试了从project1容器到project2容器的curl操作:
root@bc3afb31a5f1:/var/www/html# curl localhost:8050/login
curl: (7) Failed to connect to localhost port 8050: Connection refused

共有1个答案

皇甫心思
2023-03-14

如果您的最终设置将是每个服务将运行在物理上不同的系统上,那么实际上没有任何选择。一个系统不能直接访问另一个系统上的Docker网络;服务1能够到达服务2的唯一途径是通过其主机的DNS名称(或IP地址)和发布的端口。由于在不同的环境中这将是不同的,我建议将该值设置为配置的环境变量。

environment:
  SERVICE_2_URL: 'http://service-2-host.example.com/' # default port 80

一旦您确定了这一点,您就可以对单主机部署使用相同的设置。如果您的开发人员系统使用Docker for Mac或Docker for Windows,您应该能够使用特殊的Docker主机名访问其他服务

environment:
  SERVICE_2_URL: 'http://host.docker.internal:8082/'

(如果您在桌面上使用Linux,则必须知道主机的某些IP地址;而不是localhost,因为这意味着“这个容器”;也不是docker0接口地址,因为它将位于特定的网络上,而是类似于主机的eth0地址。)

version: '3'
networks:
  app2:
    external:
      name: app2_appnet
services:
  app:
    networks:
      - appnet
      - app2_appnet
    environment:
      SERVICE_2_URL: 'http://app2_app_1/' # using the service-internal port
      MYSQL_HOST: db # in this docker-compose.yml
 类似资料:
  • 问题内容: 我在使用时遇到了麻烦,因为我之前从未见过它,也不知道我在用它做什么。 基本上,我正在关闭部队,因为我试图在主类上运行连接。有人可以帮我添加代码吗: 问题答案: 只是一个简单的例子,它看起来像:

  • 我有一个用例,在将有效负载存储到S3之前,我需要对发送到我的Kinesis Firehose流的有效负载进行API调用。 流程为:运动数据流- 基本上,对于由我的Kinesis Firehose流使用的记录,我需要调用另一个后端服务来获取与该记录相关的其他数据,然后再存储到S3中,以便我们的EMR作业使用和编写查询。 我的问题是,有没有可能从Kinesis Firehose转换Lambda进行网络

  • 问题内容: 我一直在尝试让一个简单的网络测试程序无法运行。 服务器: 客户: 当我使用127.0.0.1或我的内部IP作为主机名时,该程序运行良好。但是,每当我切换到外部IP地址时,都会引发错误。 我特意选择了一个不常见的端口,以查看是否是问题所在,但没有运气。使用telnet可以毫无问题地进行连接,但是当我尝试使用canyouseeme.org访问端口时,它表明连接超时。我什至尝试禁用所有防火墙

  • 如何找到对等节点(Peers) Geth不断尝试连接到网络上的其他节点,直到它找到peers。如果您在路由器上启用了UPnP,或者在面向Internet的服务器上运行其他方式,则它也将接受其他节点的连接。 Geth通过称为发现协议的东西找到peers。在发现协议中,节点相互通信以了解网络上的其他节点。为了一开始就可以执行,geth使用一组引导节点,其被记录在源代码中。 想要在启动时更改bootno

  • Selenium [移动 JSON 协议规范](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md) 支持一个获取和设置网络连接的[API](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#104)。这个 API 会设置一个掩码

  • 辅助阅读:TensorFlow中文社区教程 - 英文官方教程 代码见:full_connect.py Linear Model 加载lesson 1中的数据集 将Data降维成一维,将label映射为one-hot encoding def reformat(dataset, labels): dataset = dataset.reshape((-1, image_size * imag