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

如何修改容器中Prometheus的运行端口?

问题分析与解决方案

你遇到的核心问题是混淆了Docker端口映射和Prometheus自身监听端口的区别:

  • Compose里的ports字段仅负责「主机端口:容器内端口」的映射,它不会修改容器内Prometheus实际监听的端口。官方Prometheus镜像默认让Prometheus在容器内的9090端口启动,所以你写9091:9091时,容器内根本没有服务在9091端口监听,自然访问失败。
  • EXPOSE 9090只是镜像的元数据说明,确实不限制端口映射,但它也不会改变应用的实际监听端口。

解决方法

有两种方式可以修改Prometheus的运行端口:

1. 在Compose中直接指定启动参数(推荐,无需重新构建镜像)

修改你的Compose配置,通过command字段给Prometheus添加--web.listen-address参数,指定容器内的监听端口,再对应调整端口映射:

services: 
  ...
  prometheus:
    image: my_prometheus_image
    command: --config.file=/etc/prometheus/prometheus.yml --web.listen-address=:9091
    ports: 
      - "9091:9091"  # 主机9091映射到容器内的9091
    networks:
      - nat

如果想把主机端口设为其他值(比如8080),只需要改成- "8080:9091"即可,容器内始终用9091。

2. 构建自定义镜像时修改默认启动参数

在你的自定义Dockerfile中,覆盖官方镜像的CMD命令,添加端口指定参数:

FROM prom/prometheus

COPY prometheus.yml /etc/prometheus/prometheus.yml 
CMD ["--config.file=/etc/prometheus/prometheus.yml", "--web.listen-address=:9091"]

重新构建镜像后,Compose里的ports就可以直接写- "9091:9091"(或任意主机端口映射到容器9091)。

补充说明

Prometheus的所有启动参数都可以通过prometheus --help查看,--web.listen-address是专门用来指定HTTP服务监听地址和端口的参数,格式为[address]:port,留空地址(:9091)表示监听容器内所有网卡的该端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:56:06