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

如何用docker-compose up将Docker容器端口映射到localhost端口

Docker Compose 实现容器端口映射到宿主机的配置方法

之前配置失效的原因

  • 配置network_mode: host时,容器直接共享宿主机网络栈,Docker Compose默认创建的内部桥接网络会失效,服务之间无法通过服务名(比如你配置中的db)做域名解析,因此Spring应用无法连接同配置下的数据库容器,该模式本身不适用于多服务需要内部互访的场景。
  • 单独配置expose参数仅会将端口暴露给同一Docker网络内的其他容器,不会建立宿主机到容器的端口映射,因此本地无法直接访问对应端口。
  • 你当前提供的配置文件存在YAML缩进错误,build节点下的context和dockerfile字段缩进层级不对,导致Compose无法正确加载服务配置,这也是你写了ports规则却没生效的核心原因。另外你配置的SERVER_PORT= 8010等号后多余的空格也可能导致应用端口读取异常。

正确配置方案

不需要使用host网络模式,也不需要额外配置expose,直接通过ports字段即可完成端口映射,修正错误后的完整配置如下:

version: '3.9'
services:
  db:
    container_name: mysql-db
    image: mysql:5.7
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_USER=my_user
      - MYSQL_PASSWORD=my_pass
      - MYSQL_DATABASE=my_db
    ports:
      - "3307:3306"
    volumes:
      - mysql:/var/lib/mysql
    healthcheck:
      test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
      timeout: 20s
      retries: 10

  app-backend:
    container_name: my-app
    image: app
    restart: on-failure
    environment:
      - _JAVA_OPTIONS=-Xmx512m -Xms256m
      - SERVER_PORT=8010
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/my_db?useLegacyDatetimeCode=false&serverTimezone=UTC
    links:
      - db
    ports:
      # 格式为 "宿主机端口:容器内监听端口",如果要本地8080访问就改成 "8080:8010"
      - "8010:8010"
    build:
      context: .
      dockerfile: "Dockerfile"
    depends_on:
      db:
        condition: service_healthy

volumes:
  mysql:

配置说明&操作注意事项

  • ports字段的映射规则为"宿主机监听端口:容器内部应用监听端口",比如你希望本地通过localhost:8080访问应用,只需要把app-backend服务下的ports配置改成"8080:8010"即可。
  • 保持默认的桥接网络模式即可,同一Compose栈下的服务可以直接通过服务名(比如数据库地址填db:3306)互访,不需要额外配置网络。
  • 修改配置后先执行docker-compose down清理之前创建的旧容器,再执行docker-compose up -d --build重新构建启动服务,避免旧容器的配置缓存导致规则不生效。
  • 启动后可以执行docker ps查看端口映射状态,如果PORTS列出现0.0.0.0:8010->8010/tcp(或你自定义的宿主机端口)的记录,就说明映射规则已经生效。
  • 如果端口映射存在但仍无法访问,进入容器检查Spring应用是否正常监听0.0.0.0:8010,如果应用仅绑定容器内的127.0.0.1地址,端口映射会失效,Spring Boot默认监听0.0.0.0地址,一般不需要额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:03:10