【问题标题】:How do I expose port to host's ephemeral port and bind it to localhost如何将端口公开给主机的临时端口并将其绑定到 localhost
【发布时间】:2019-11-06 07:55:03
【问题描述】:

Docker 撰写问题(任何版本都可以)

我需要将容器中的端口 60000 暴露给主机的临时(随机)端口,并将其仅绑定到 localhost。

语法

ports: 
   - 60000

导致 0.0.0.0:32XXX 端口暴露。

语法 - "127.0.0.1:YYYY:60000" 要求我设置静态主机端口 (YYYY)

我知道我可以将 docker daemon 绑定为仅在 localhost 上侦听,但这对我来说真的不起作用,因为我需要另一个容器来侦听 0.0.0.0

【问题讨论】:

  • 你试过127.0.0.1::60000吗?
  • 是的。语法错误
  • 我认为你不能只在 localhost 上公开,但是从 docker-compose 的 3.2 版本中你可以:``` version: '3.7' services: web: image: "redis" ports: - 目标:80 已发布:8080 协议:tcp 模式:主机 ``` 如果您从 docker-compose 中删除“已发布”标志,您可以在“0.0.0.0”上公开一个随机端口

标签: docker docker-compose


【解决方案1】:

如果您显示的语法不起作用,那么 Docker Compose 3.7 就无法做到这一点(但它可能是一个相当简单的 GitHub 拉取请求来添加它)。 (另请注意,此语法 记录在 docker run 文档中;这只是 Compose 中的一个解析问题。)

最好的解决方法可能是自己选择一个“公共”端口。如果您尝试调整围绕docker run -p 127.0.0.1::60000 甚至docker run -P 构建的工作流程,那将更加棘手。

Docker Compose 的实际源代码位于 GitHub docker/compose 存储库中。这包括用于docker-compose.yml 文件的configuration schema,以及用于处理ports: 内容的ServicePort.parse 方法。似乎字符串的 parse 方法不支持缺少的已发布端口(我不确定为什么),并且架构不允许 long syntaxexternal_ip: 选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多