我有一个容器,我可以通过其暴露我的端口来访问在该容器中运行的服务。我没有将容器外部的端口暴露给主机(使用Mac上的主机网络)。使用exec -t
进入容器并为发布请求运行curl时,出现错误:
curl command: curl http://localhost:19999
Failed connect to localhost:19999; Connection refused
。
我在dockerfile中有暴露命令,并且不想将端口暴露给主机。我的服务也在容器中启动并运行。我也将配置内的属性设置为
"ExposedPorts": {"19999/tcp": {}}
(通过`docker inspect
我也将发布docker-compose文件,但这是通过maven构建的。我可以确保使用19999:19999公开我的端口。另一个怪异的问题是,在禁用我的代理后,它将为我的自定义服务运行一个非常轻量级的命令,并且不会再次运行它,返回与上述相同的错误。该问题仅在我的计算机上发生,而在其他计算机上不发生
答案 0 :(得分:1)
如果您不<发布>发布端口(使用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空间外部访问端口时,仍然需要单独发布端口。
答案 1 :(得分:0)
提示:
该应用程序必须在端口false, thus the invalid date
上侦听,这可能不是。
您在Dockerfile中使用的which is qeuivalent to
不会执行任何操作。
通常不需要更改应用程序正在侦听的默认端口,因此每个容器都有自己的IP,因此不应在端口冲突中运行。
答案:
不用curl缩19999
,而是尝试使用应用程序通常在其上监听的默认端口(很难猜测您要运行的端口)。