java - 将随机端口暴露给 docker-compose.yml

标签 java spring spring-boot docker docker-compose

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

最佳答案

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

关于java - 将随机端口暴露给 docker-compose.yml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60109556/

相关文章:

java - 使用 Spring Boot 连接拒绝的 Kubernetes 服务发现

java - 带有单元测试的 Spring Boot 测试 API 端点应返回 404 而不是 400

Java同步任务

Java - 如何检索局域网上已知端口的服务器IP

java - 如何纠正使用 Java IO 写入文件的无提示失败?

java - viewpager 中的 Android 应用程序 fragment 无缘无故分离

java - Spring 应用程序中 AplicationContext 架构错误

java - Spring中的日期时间格式

java - 在 AbstractTransactionalTestNGSpringContextTests 中的 hibernate 和 JdbcTemplate 之间共享 Spring 事务

spring-boot - 找不到类型为 'com.netflix.discovery.AbstractDiscoveryClientOptionalArgs' 的 bean