如何使用Docker隐藏微服务之间的API连接?

如何使用Docker隐藏微服务之间的API连接?,docker,nginx,docker-compose,microservices,Docker,Nginx,Docker Compose,Microservices,我是Docker的新手,我正在设置一个新的应用程序,其中Docker compose文件中有两个服务: # Contains all my API servers api_load_balancer: build: ./microservices/load_balancer restart: always ports: - "8080:80" # Contains all my client servers server_client: buil

我是Docker的新手,我正在设置一个新的应用程序,其中Docker compose文件中有两个服务:

# Contains all my API servers

api_load_balancer:  
    build: ./microservices/load_balancer
    restart: always
    ports:
    - "8080:80"

# Contains all my client servers

server_client:
    build: ./microservices/client
    ports:
    - "80:80"
    ....
我的microservices/load_balancer nginx.conf如下所示:

events { worker_connections 1024; }
http{
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  upstream api_nodes {
   server api_1:9000;
  }
  upstream socket_nodes {
    ip_hash;
    server socketio_1:5000;
  }


 # SERVER API
 server {
   location /socket.io/ {
     proxy_set_header Access-Control-Allow-Origin *;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header Host $host;

     proxy_pass http://socket_nodes;

     # enable WebSockets
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
  }
  location /api/ {
    proxy_set_header Access-Control-Allow-Origin *;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;

    proxy_pass http://api_nodes;
  }
 }
}
FROM nginx:alpine
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./ssl ./etc/nginx/ssl
EXPOSE 80
我的负载均衡器/Dockerfile如下所示:

events { worker_connections 1024; }
http{
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  upstream api_nodes {
   server api_1:9000;
  }
  upstream socket_nodes {
    ip_hash;
    server socketio_1:5000;
  }


 # SERVER API
 server {
   location /socket.io/ {
     proxy_set_header Access-Control-Allow-Origin *;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header Host $host;

     proxy_pass http://socket_nodes;

     # enable WebSockets
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
  }
  location /api/ {
    proxy_set_header Access-Control-Allow-Origin *;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;

    proxy_pass http://api_nodes;
  }
 }
}
FROM nginx:alpine
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./ssl ./etc/nginx/ssl
EXPOSE 80
当我尝试从客户端进行连接时,我可以从客户端的服务器进行连接(使用api_load_balancer连接字符串,因为它们位于同一docker网络中),但是,当我尝试从浏览器进行调用时,我需要将连接字符串更改为localhost:8080或某个.ip.in.public.server:8080


我不喜欢这样既不公开我的端口也不公开我的API配置的想法,那么有什么方法可以在这些微服务之间实现更透明的连接呢?我不知道是否可以这样做。

您是否可以在同一主机上显示您的dockerfile./microservices/load\u balancer?容器,其中包含浏览器,并且您希望在浏览器上访问该容器。是吗?@onder,是的,这个想法是有两个主要的微服务,一个负责前端连接,另一个负责我的API操作。我可以在不同的主机上做,但我想知道是否有可能在我还在开发的主机上做phase@Albeis,我已将其添加到问题描述中。您发布的是de nginxconf,而不是dockerfile。如何制作dokcer映像?能否在同一主机上显示dockerfile./microservices/load\u balancer?容器,其中包含浏览器,并且您希望在浏览器上访问该容器。是吗?@onder,是的,这个想法是有两个主要的微服务,一个负责前端连接,另一个负责我的API操作。我可以在不同的主机上做,但我想知道是否有可能在我还在开发的主机上做phase@Albeis,我已将其添加到问题描述中。您发布的是de nginxconf,而不是dockerfile。如何塑造你的dokcer形象?