Docker容器间通信故障:无法从novnc容器curl访问web容器
容器间Docker网络通信失败问题解决
问题场景
我有两个Docker容器,尝试在容器间通过curl进行通信,已配置名为backend的bridge类型共享网络。docker-compose配置如下:
version: '3.8' services: web: build: ./webapp/. container_name: storyweb command: python3 /app/manage.py runserver 0.0.0.0:8000 volumes: - ./webapp/:/app/ ports: - 8007:8000 networks: - backend env_file: - ./.env.dev novnc: container_name: dramatica build: ./dramatica/. environment: # Adjust to your screen size - DISPLAY_WIDTH=1200 - DISPLAY_HEIGHT=800 - PUID=1000 - PGID=1000 ports: - "8008:8080" volumes: - ./dramatica:/app networks: - backend restart: unless-stopped depends_on: - web entrypoint: /app/entrypoint.sh networks: backend: driver: bridge
尝试从novnc容器内部执行curl -i web:8007或curl -i storyweb:8007,均无法成功通信。
原因分析
- 端口使用错误:容器间通信直接使用容器内部服务监听的端口,而非宿主机的端口映射。web容器的服务实际监听的是容器内的
8000端口,8007是宿主机的映射端口,容器内部无法通过这个端口访问web服务。 - 额外排查方向:
- 验证web服务是否正常启动:进入web容器执行
curl localhost:8000,确认服务本身可访问 - 检查网络解析:在novnc容器内执行
ping web或ping storyweb,确认容器名能正常解析到IP地址 - 确认服务绑定地址:web服务已配置绑定
0.0.0.0,确保容器外部(同网络内的其他容器)能访问,若绑定127.0.0.1则容器间无法访问
- 验证web服务是否正常启动:进入web容器执行
解决方法
在novnc容器内执行正确的curl命令,使用容器内部的8000端口:
curl -i web:8000 # 或使用容器名访问 curl -i storyweb:8000
内容的提问来源于stack exchange,提问作者user791793
相关产品推荐
相关产品推荐

