我在Docker中遇到了端口Map问题。
我想将容器外部的端口8090Map到容器内部的端口80。
下面是运行的容器:
ea41c430105d tag-xx "/usr/local/openrest…" 4 minutes ago Up 4 minutes 8090/tcp, 0.0.0.0:8090->80/tcp web
字符串
注意,它说端口8090Map到端口80。
现在在另一个容器里,
curl web
型
我得到一个401
响应。这意味着容器响应了。到目前为止一切顺利。
当我做curl web:8090
时,我得到:
curl: (7) Failed to connect to web port 8090: Connection refused
型
为什么端口Map对我不起作用?
谢谢
P.S.我知道我的容器对curl web
的响应是401,因为当我停止docker stop web
并再次执行curl web
时,我会得到could not resolve host: web
。
4条答案
按热度按时间gupuwyp21#
您无法从另一个容器内部连接到已发布的端口,因为这些端口仅在主机上可用。在您的情况下:
从主机:
curl localhost:8090
将连接到您的容器curl localhost:80
无法连接到您的容器,因为端口未发布来自同一网络中的另一个容器
curl web
可以用curl web:8090
无法工作,因为唯一暴露并侦听Web服务的端口是80。dwbf0jvd2#
除非指定,否则Docker容器连接到默认网桥网络。此默认网桥网络不支持容器之间的自动DNS解析。看起来您最有可能在默认网桥网络上。但是,在默认网桥网络上,您可以使用容器IP地址进行连接,可以使用以下命令查找
字符串
所以
curl <IP Address of web container>:8090
应该可以工作。最好创建一个用户定义的桥接网络,并将容器连接到该网络。在用户定义的桥接网络上,已连接的容器的端口彼此公开,而不对外公开。用户定义的桥接网络还支持自动DNS解析,您可以引用容器的名称而不是IP地址。您可以尝试以下命令来创建一个用户定义的桥接网络,并将您的容器连接到它。
型
现在,从另一个容器中,你应该可以在“web”容器上运行curl。
xmakbtuz3#
您可以创建网络来连接容器之间。或者您可以使用--link:
docker run --name container1 -p 80:?-d image(expose on port 80)
docker run --name container2 --links lcontainer1:container1
在容器2内,您可以用途:
curl l容器1
希望它能帮助
xtfmy6hx4#
看这个端口主要被docker-proxy使用
为了加深您的理解,请按照以下步骤获取更多知识。
首先,使用以下命令之一来检查端口是否已被使用。
字符串
如果你遇到这样的事情:
型
如果端口已在使用中,则可以运行此命令来标识使用它的进程。
型
检查结果以确定谁正在使用端口。
型