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

问题描述

我正在寻找有关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

我尝试了各种测试来调试,例如:

  1. 在Windows主机上本地运行客户端和服务器

    • 连接和交流
  2. 在linux容器中运行客户端和服务器

    • 连接和交流
  3. 使用127.0.0.1:8888在Windows上运行客户端,并在容器中运行服务器

    • 客户端连接到端口,但无法通信
  4. 使用docker IP:8888在Windows上运行客户端,并在容器中运行服务器

    • 客户端无法连接到端口
  5. Test-NetConnection-计算机名127.0.0.1-端口8888

    • 成功
  6. Test-NetConnection-计算机名127.0.0.1-端口8889

    • 失败,如预期(不同端口-测试测试)
  7. telnet 127.0.0.1 8888

    • 似乎可以连接,但不返回或记录任何有用的信息。立即退出。
  8. telnet 127.0.0.1 8889

    • 无法按预期连接(不同端口-测试测试)
  9. 根据某些网络搜索,我还尝试将docker compose中的端口设置为0.0.0.0:8888:8888

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

    • 客户端连接到端口,但无法通信
  11. 我认为docker容器中可能正在运行防火墙,但是我没有看到安装iptables的任何证据

鉴于客户端/服务器应用程序似乎在两种环境下都可以工作,我认为我可以排除我的python代码为罪魁祸首。这让我以为我的docker设置缺少某些内容,或者某些东西阻止了连接,或者我的Windows与linux网络连接固有地损坏了。

任何有关进一步调试的解决方案或技巧都将受到赞赏。

解决方法

根据Karl的评论,需要将python服务器绑定到0.0.0.0而不是127.0.0.1。无需更改Dockerfile或docker-compose.yml。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...