You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker-Compose近期无法暴露80端口,run命令端口映射失效求助

问题描述

我负责的一个小型本地开发项目使用如下docker-compose.yml配置文件:

version: '3.8'

services:
  php:
    image: php:8.2.4-apache
    ports:
      - 80:80
    volumes:
      - ./src:/var/www/html/

  composer:
    image: composer:2.5.4
    volumes:
      - ./src:/app

近期使用docker-compose run --rm php启动主容器时,80端口未成功映射,docker-compose ps显示无端口映射记录;通过docker ps查看也发现该容器未进行端口映射。而直接使用Docker命令运行相同配置时,一切正常。该配置此前已正常运行数月,且容器日志与正常启动的容器完全一致。请问是否是Docker-Compose的新特性导致端口映射失效?


解答

这不是Docker Compose的新特性问题,而是docker-compose run命令的默认行为——它本来就不会继承docker-compose.yml里定义的ports端口映射配置。

原因

docker-compose run是用来临时启动容器执行一次性任务的(比如调试、跑脚本),不是用来启动长期运行的服务。为了避免和已经用docker-compose up启动的同服务端口冲突,它默认会跳过端口映射、端口暴露这类配置。

解决办法

如果用docker-compose run时需要端口映射,有两种可选方案:

  • 执行命令时加上--service-ports参数,强制加载服务定义里的端口配置:
    docker-compose run --rm --service-ports php
    
  • 要是你本来就是要长期运行这个服务,建议直接用docker-compose up启动:
    docker-compose up -d php
    

你说之前配置正常运行了数月,应该是之前用的是docker-compose up命令启动服务,而非docker-compose run。

内容的提问来源于stack exchange,提问作者Menachem Hornbacher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:50:10