【问题标题】:Docker cannot access exposed port inside containerDocker 无法访问容器内的暴露端口
【发布时间】:2020-08-25 23:22:48
【问题描述】:

我有一个容器,我为它公开我的端口以访问在容器内运行的服务。我没有将我的端口暴露在容器之外,即暴露给主机(在 mac 上使用主机网络)。在使用 exec -t 进入容器并为发布请求运行 curl 时,我收到错误:

curl command: curl http://localhost:19999 Failed connect to localhost:19999; Connection refused.

我的 dockerfile 中有公开命令,不想将端口公开给我的主机。我的服务也在容器内启动并运行。我还将配置中的属性设置为 "ExposedPorts": {"19999/tcp": {}} (通过 `docker inspect \ 获得关于为什么这不起作用的任何想法?使用 docker for Mac

我也会发布我的 docker-compose 文件,但这是通过 maven 构建的。我可以确保我使用 19999:19999 公开我的端口。另一个奇怪的问题是,在禁用我的代理时,它会为我的自定义服务运行一个非常轻量级的命令,并且不会再次运行它,返回与上述相同的错误。该问题仅出现在我的机器上,而不是其他机器上

【问题讨论】:

  • 能否通过将端口转发到 docker 主机来验证是否可以访问应用程序?
  • 请提供代码sn-ps,用于docker file curl命令和服务器端代码

标签: docker dockerfile


【解决方案1】:

提示:
该应用程序必须正在侦听端口 19999,这可能不是。
您在 Dockerfile 中使用的 EXPOSE 什么都不做。

通常不需要更改应用程序正在侦听的默认端口,因此每个容器都有自己的 IP,您不应在端口冲突中运行。

答案:
尝试使用您的应用程序通常会监听的默认端口而不是 curling 19999(很难猜出您要运行什么)。

【讨论】:

    【解决方案2】:

    如果您不发布端口(使用 docker run -p 选项或 Docker Compose ports: 选项),则无法直接访问 Docker for Mac 上的容器。请参阅 Docker Desktop for Mac 文档中的Known limitations, use cases, and workarounds:“不可能按容器进行 IP 寻址”项目就是您要尝试的内容。

    docker inspect IP 地址基本上没有用,除了在一个非常特定的 Docker 配置中(在本机 Linux 主机上,从 Docker 外部调用,在同一主机上);我懒得去查了。

    Dockerfile EXPOSE 指令和类似的运行时选项做的很少,主要用作文档。即使您已经配置好了,您仍然需要在启动容器以从 Docker 空间外部访问它时单独发布端口。

    【讨论】:

      猜你喜欢
      • 2019-09-10
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 2020-02-21
      相关资源
      最近更新 更多