Docker 容器中的 Web 界面无法访问

Docker 容器中的 Web 界面无法访问

我目前正在建立一个由不同的 Docker 容器组成的系统,这些容器必须以某种方式相互通信。

一个 Docker 容器专用于 XMPP 服务器(韵律)。此容器通过下列步骤启动docker-compose.yml

version: "3.8"

services:

  prosody_server:
    container_name: prosody_server
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "5222:5222"
      - "5269:5269"
      - "5347:5347"

当我在该容器上运行时docker ports,我得到以下输出,表明端口映射有效:

5222/tcp -> 0.0.0.0:5222
5269/tcp -> 0.0.0.0:5269
5347/tcp -> 0.0.0.0:5347

第二个 Docker 容器运行一个 Python 脚本,该脚本与 XMPP 服务器交互并进一步托管一个简单的 Web 界面。我的问题是,如果我在启动Python 脚本的文件network_mode: "host"中设置,由于某种原因,第二个 Docker 容器只能与第一个容器中的 XMPP 服务器通信docker-compose.yml

version: '3.8'

services:
  python_script:
    build:
      context: ../
      dockerfile: docker/Dockerfile
    container_name: python_script
    stdin_open: true
    network_mode: 'host'
    working_dir: '/python'
    command: bash -c 'python main.py'

在这种情况下,我可以使用 Python 脚本成功运行 Docker 容器,并且它能够与 XMPP 服务器通信。
但是,在这种情况下无法访问 Web 界面。它使用库托管aiohttp并提供服务0.0.0.0:8080
使用为 Python 脚本提供服务的 Docker 容器的 bash,我可以通过输入成功请求界面curl localhost:8080,但无法从容器外部访问它。
据我所知,使用network_mode: "host"理论上可以使curl localhost:8080我的主机上类似地使用,但不起作用。
更改 XMPP 服务器的 Docker 容器或 Python 脚本容器的网络配置也不起作用,因为这会干扰这些容器之间的通信。
我还为防火墙添加了例外并暂时完全禁用它,但这并不能解决问题。

相关内容