【发布时间】:2018-08-30 03:25:20
【问题描述】:
我的主机中运行着一个 websocket 服务器,监听 8080 端口。 在一个 docker 容器中,我部署了一个 websocket 客户端,使用这个 sn-p 监听所述服务器:
connect_url="ws://0.0.0.0:80/"
并且,将容器的 80 端口暴露/映射到主机的 8080 端口。
Dockerfile:
EXPOSE 80
当我运行容器时:
docker run -p 8080:80 <name>
但是我收到了这个错误:
docker:来自守护进程的错误响应:驱动程序在端点上编程外部连接失败:启动用户态代理时出错:绑定 0.0.0.0:8080 失败:端口已分配。
现在我认为这个错误是因为主机中的服务器已经在使用8080端口,这就是它无法映射的原因。
有了这些细节,我只想知道我的 docker 容器内的 websocket 客户端如何连接到主机中的 websocket 服务器。
【问题讨论】:
-
你是对的,端口已经绑定到你的服务器了。与其向主机打开容器的端口 (80),不如执行相反的操作。最好的方法是使用
--net=host运行容器,它直接与容器共享主机的网络。 -
我会试试你提到的 --net=host。谢谢
-
我已经尝试过 --net=host。但是socket无法连接到8080端口。我也把connect_url改成了ws://0.0.0.0:8080/
-
是的,很抱歉,您需要在客户端上使用
8080来匹配主机的端口。你试过127.0.0.1而不是0.0.0.0吗? -
我尝试了 127.0.01,但仍然没有运气。我在 EXPOSE 8080 存在且不在 Docker 文件中时尝试过