docker-compose 是否允许将一个端口映射到两个端口,或者我需要大使吗?

Will docker-compose allow mapping a port to two ports or do I need an ambassador?

假设我有一个侦听 8888 的应用程序 - 应用程序的其他部分希望继续在 8888 上访问它 - 但外部用户需要在上面的端口范围内访问它50000 - 例如 50888

我想在 docker-compose.yml 中做的是:

ports:
  - "8888:8888"
  - "50888:8888"

这行得通吗?

我的另一种选择是像这样在其中添加一个 ambassador

blah:
  image: blah:6
  ports:
    - "8888:8888"
  container_name: blah
  networks:
    default: {}
blah_ambassador:
  image: svendowideit/ambassador
  links:
    - blah
  ports:
    - "50888:8888"
  environment:
    - BLAH_PORT_8888_TCP:tcp://blah:8888 
  container_name: ops_ambassador
  networks:
    default: {}

我的问题是:docker-compose 是否允许将一个端口映射到两个端口,或者我需要大使吗?

前段时间,docker-compose使用字典来存储映射端口,key是内部端口,所以一个值覆盖了另一个。

已使用列表解决此问题 here。因此,目前,docker-compose 允许将一个内部端口映射到两个端口。也许您使用的是较旧的 docker-compose 版本。

示例:

→ docker-compose -v
docker-compose version 1.8.0, build f3628c7

Docker-撰写文件内容(docker-compose.yml):

backend:
  image: your_image
  ports:
    - 3000:3000
    - 8888:3000

docker 检查命令:docker inspect your_container_id

"Ports": {
            "3000/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "8888"
                },
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "3000"
                }
            ]
        },