[英]Python WebSocket connection refused in Docker
我有一个 python socketio 应用程序,在本地运行时工作得很好。 但是,当我将其移至 Docker 时,外部客户端无法连接并抛出此错误:
socketio.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
WebSocket 服务器非常基础,发布到0.0.0.0:8080
。 我的客户端应用程序监听localhost:8080
。 在我的 Docker 容器中,我暴露了 8080 端口。我猜我的容器设置不正确。:
Dockerfile:
FROM python:latest
WORKDIR /path/to/project
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
码头工人-compose.yml
version: "3.9"
services:
app:
build: .
working_dir: /path/to/project
stdin_open: true
tty: true
ports:
- "8080:8080"
volumes:
- type: bind
source: .
target: /path/to/project
我用docker-compose up
启动我的容器,我正在使用 Docker Desktop(如果有帮助的话)。 我使用这个环境进行开发,所以我用python my_server.py
启动我的服务器。 服务器启动成功。 我还缺少什么?
根据其他人在网上对这个问题的看法,我尝试了以下方法
0.0.0.0
为主机EXPOSE 8080
host
您的容器连接似乎很好。
您尚未指定要在容器中运行的任何命令。 为了确保您的服务器实际上在端口 8080 上运行,您可以在 Dockerfile 中添加CMD
指令或在 docker docker-compose.yaml
中指定 cmd 。 这可以通过以下方式完成:
CMD ["python", "my_server.py"]
或者使用docker-compose.yaml
文件作为:
version: "3.9"
services:
app:
build: .
working_dir: /path/to/project
stdin_open: true
tty: true
command: python my_server.py #<== this overrides the Dockerfile CMD instruction
ports:
- "8080:8080"
volumes:
- type: bind
source: .
target: /path/to/project
您可以在此处了解有关docker-compose.yaml
中command
的更多信息。
这也是使用 docker 开发的推荐方式。 在正在运行的容器中运行命令以进行开发工作不是正确的方法。 每次测试新更改时,您基本上都会运行 docker compose。 这避免了很多像这样的连接不起作用的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.