python - Windows 客户端无法与在 linux docker 容器中运行的服务器通信

标签 python linux docker windows-10 docker-networking

我正在寻找有关 Windows 主机和 linux 容器之间基本 docker 网络的一些帮助。
作为 docker 新手,我希望在主机上运行的自定义 python 客户端能够与在 dev docker 容器中运行的自定义 python tcp 服务器通信。
在 windows 10 主机上独占运行时,客户端和服务器可以成功连接和通信。在 linux 容器上独占运行时,客户端和服务器可以成功连接和通信。当我尝试让 windows 10 主机服务器上的客户端与容器中的 linux 服务器进行通信时,就会出现问题。客户端能够连接到暴露的端口,但它似乎没有与服务器通信。当客户端连接到暴露的端口时,容器化服务器上​​的日志没有显示任何连接。
我的 docker 设置相当基本:
Dockerfile:

FROM python:3.8 AS base
RUN cp -f /usr/share/zoneinfo/America/Los_Angeles /etc/localtime
COPY requirements.txt /tmp
RUN pip install -r /tmp/requirements.txt
EXPOSE 8888
CMD [ "python", "/opt/sog/server.py" ]
docker -compose.yml:
version: "3.8"

services:
  sog:
    image: sog
    ports:
      - 8888:8888
    volumes:
      - ./sog/:/opt/sog
我尝试了各种测试来调试,例如:
  • 在 windows 主机上本地运行客户端和服务器
  • 连接和通信

  • 在linux容器中运行客户端和服务器
  • 连接和通信

  • 在 windows 上运行客户端,在容器中运行服务器,使用 127.0.0.1:8888
  • 客户端连接到端口,但无法通信

  • 使用 docker IP:8888 在 windows 上运行客户端,在容器中运行服务器
  • 客户端无法连接到端口

  • 测试网络连接-计算机名 127.0.0.1-端口 8888
  • 成功

  • 测试网络连接-计算机名 127.0.0.1 -端口 8889
  • 如预期的那样失败(不同的端口 - 测试测试)

  • 远程登录 127.0.0.1 8888
  • 似乎连接,但不返回或记录任何有用的东西。立即退出。

  • 远程登录 127.0.0.1 8889
  • 按预期连接失败(不同的端口 - 测试测试)

  • 根据一些网络搜索,我还尝试将 docker compose 中的端口设置为 0.0.0.0:8888:8888
  • 客户端连接到端口,但无法通信

  • 我还尝试过暂时关闭我的防病毒软件,以防它阻止通信
  • 客户端连接到端口,但无法通信

  • 我考虑过防火墙可能在 docker 容器中运行,但我没有看到任何安装 iptables 的证据

  • 鉴于客户端/服务器应用程序似乎可以在两种环境中工作,我想我可以排除我的 python 代码是罪魁祸首。这让我觉得我的 docker 设置丢失了一些东西,有些东西阻止了连接,或者我的 windows 到 linux 网络连接存在固有的问题。
    非常感谢任何有关如何进一步调试的解决方案或提示。

    最佳答案

    根据 Karl的评论,python服务器需要绑定(bind)到0.0.0.0而不是127.0.0.1。不需要对 Dockerfile 或 docker-compose.yml 进行任何更改。

    关于python - Windows 客户端无法与在 linux docker 容器中运行的服务器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63946132/

    相关文章:

    docker - 当容器开始使用Dockerfile时如何触摸文件

    jenkins - 为持续交付创建大量 Docker 标签有什么问题吗?

    python - 初学者网络 GIS 制图

    linux - test_venv Python 3.6.1 安装失败

    python - 如何通过唯一索引对 pandas 列求和,然后重置总和?

    c - ncurses 是在 linux 的 C 程序中实现命令历史记录的好选择吗

    c - fgets 在 C linux 中不工作

    postgresql - postgresql 的自动化脚本

    python - 如何在 Python Mayavi 中画线?

    python - 在 pyspark 中广播大型数组(~ 8GB)