向 docker-compose.yml 公开随机端口

Posted

技术标签:

【中文标题】向 docker-compose.yml 公开随机端口【英文标题】:Expose random port to docker-compose.yml 【发布时间】:2020-05-23 08:39:03 【问题描述】:

我需要同一应用程序的多个实例,因为我正在使用 server.port=0 在随机端口运行应用程序。 我的问题是如何将随机生成的端口映射到 docker-compose.yml 以创建多个实例。 我在后端使用弹簧靴。我找不到任何解决方案。 非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

每个 Docker 容器在隔离的网络命名空间中运行一个进程,因此这不是必需的。选择一个固定端口。对于 HTTP 服务,常见的端口号包括 80、3000、8000 和 8080,具体取决于权限和语言运行时(80 需要提升权限,3000 是 Node 的默认值,依此类推)。确切的端口号无关紧要。

您使用已发布的端口从外部 Docker 空间访问该端口。如果您正在运行多个容器,如果多个服务使用相同的主机端口,则可能会发生冲突,这可能是您要避免的。在docker run -p 选项或 Docker Compose ports: 设置中,可以只列出容器内运行的端口,Docker 会为您选择一个主机端口。

version: "3"
services:
  web:
    image: ...
    ports:
      - "8000"                       # no explicit host port
    command: ... -Dserver.port=8000  # fixed container port

docker-compose port web 8000 会告诉你主机(公共)端口号是什么。对于同一 docker-compose.yml 文件中的容器之间的通信,您可以使用服务名称和(固定的、已知的)内部端口 http://web:8000

【讨论】:

我可以使用容器的固定端口与 docker-compose 文件中的容器通信,并将它们暴露给主机。 server.port=0 在运行时生成随机端口。有什么办法可以将随机生成的端口暴露给主机? 不,Docker 端口映射机制希望容器内有一个固定端口。由于每个容器都在隔离的网络环境中运行,因此无需随机化端口。 我是 docker 新手。我现在有点困惑。如果我们修复端口,当我们创建多个实例时,可能会出现端口绑定问题。固定端口时如何创建多个实例? "会告诉你主机(公共)端口号是什么。"我在输出中没有看到这个。它在哪里告诉我这个?

以上是关于向 docker-compose.yml 公开随机端口的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose.yml文件

如何从 docker-compose.yml 更改 docker-compose.yml 中已安装卷的权限?

docker-compose.yml 使用说明

Docker-Compose.yml配置讲解

我应该把 docker-compose.yml 放在哪里

“docker-compose”命令为 docker-compose.yml 文件设置路径