docker 撰写网络的私有 "host"

Private "host" for docker compose network

给定一个 docker-compose 文件是这样的

version: "3.8"
services:
  service-one:
    ports:
      - "8881:8080"
    image: service-one:latest
  service-one:
    ports:
      - "8882:8080"
    image: service-two:latest

发生的情况是 service-one 在端口 8881 上暴露给主机网络,而 service-two 会在端口 8882 上暴露在主机网络上。

我希望能够安排的是,在为 docker-compose 创建的网络中,有一个 "private host",service-one 将在端口公开8881 和 service-two 将在端口 8882 上公开,这样 docker-compose 网络中的任何容器都能够连接到 "private host" 并连接到其配置的 [=27] 上的服务=] 但 不是 在实际的 docker 主机上。也就是说,要让通常从 CONTAINER_PORT 桥接到 HOST_PORT 的任何网络配置私下发生在 docker-compose 网络中,而不会有机会在实际端口上发生端口冲突主机网络。

我调整 以适应您的情况。这个想法是 运行 socat 在网关中,以便容器或图像发生变化(只是服务名称)。因此,从 service-X-backend 您可以连接到:

  • service-one 在端口 8881 上,并且
  • service-two 在端口 8882

使用 nginx 容器测试。

如果你想制作一些端口 public,你需要从网关本身发布它们。

version: "3.8"

services:

  service-one-backend:
    image: service-one:latest
    networks:
      - gw

  service-two-backend:
    image: service-two:latest
    networks:
      - gw

  gateway:
    image: debian
    networks:
      gw:
        aliases:
          - service-one
          - service-two
    depends_on:
      - service-one-backend
      - service-two-backend
    command: sh -c "apt-get update
                 && apt-get install -y socat
                 && nohup bash -c \"socat TCP-LISTEN: 8881,fork TCP:service-one-backend:8080 2>&1 &\"
                 && socat TCP-LISTEN: 8882,fork TCP:service-two-backend:8080"


networks:
  gw: