我正在使用微服务架构构建应用程序。
基本上,我的应用程序看起来像这样
API GATEWAY(port 3000) => USERS-SERVICE(port 9090), AUTH-SERVICE(port 8080), SEND-SMS-SERVICE(port 7070).
直到现在一切正常。
现在我尝试在我的项目中实现docker。我为每个服务构建一个图像 并在我的本地计算机上为每个运行容器实例。
现在我想开发新的服务客户服务。并且此服务在
上运行
问题:
1)我如何从api网关请求http://localhost:3030,如果在开发中我从容器运行api-gateway。
答案 0 :(得分:1)
您必须了解网络概念,当您启动独立的docker实例并且您没有定义网络时,它们之间将无法访问它们。
还有其他一些事情,您无法使用localhost
访问Docker中托管的一个微服务到其他docker镜像中托管的其他Micro服务,localhost
是127.0.0.1
。这是对本地机器的调用。那么docker的概念就像“在同一台机器上运行的不同机器”就像一个虚拟机,但是docker共享主机内核。
您可以通过两种方式访问其他泊坞窗图像。
http://my-service-1:3400/api/v1/post
我建议你使用docker-compose。
这是我的一个存储库,我创建了使用JWT共享节点应用程序的支持,但是这个项目使用Docker和docker-compose
https://github.com/camiloperezv/jwt-template
如何查看,我在Network
中定义docker-compose.yml
属性,并在我的所有服务中使用此网络。
在服务部分,您将放置所有微服务,在代码中,您将使用容器名称而不是使用localhost或IP地址来发出http请求。
在我的服务中使用build: .
这是用于开发的用途,在生产中你应该使用预构建的docker镜像而不是在生产服务器上构建它。
随意使用我的github代码。
此致
答案 1 :(得分:0)
据我从问题中了解,新服务Costumer-Service
在主机上的http://localhost:3030
上运行。
如果是,则应在主机网络中启动api-gateway
泊坞窗容器:
docker run --network host -d <api-gateway_image_name>
Costumer-Service
可以从localhost:3030
容器api-gateway
访问CREATE TABLE Employee_id_credits ( Employee_id, credits ) AS
SELECT 10, 1 FROM DUAL UNION ALL
SELECT 12, 1 FROM DUAL UNION ALL
SELECT 10, 1 FROM DUAL UNION ALL
SELECT 12, 1 FROM DUAL UNION ALL
SELECT 12, 1 FROM DUAL UNION ALL
SELECT 14, 1 FROM DUAL;
CREATE TABLE Employee_Manager ( Employee_id, Manager_id ) AS
SELECT 10, 101 FROM DUAL UNION ALL
SELECT 12, 120 FROM DUAL UNION ALL
SELECT 13, 120 FROM DUAL UNION ALL
SELECT 14, 150 FROM DUAL UNION ALL
SELECT 101, NULL FROM DUAL UNION ALL
SELECT 120, 130 FROM DUAL UNION ALL
SELECT 130, NULL FROM DUAL;
。