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

如何通过公网IP访问远程服务器上的Docker化应用?

解决方案:通过远程服务器IP对外开放Docker化应用

一、配置文件调整

  1. 修正前端API地址
    将my_frontend服务中的REACT_APP_API_SERVER值替换为服务器实际IP IP_Server_X,确保前端能正确请求到后端:
environment:
  - REACT_APP_API_SERVER=http://IP_Server_X:5000 # 替换为你的服务器IP
  1. 限制数据库对外暴露(安全建议)
    当前配置中Postgres映射了54320:5432,数据库直接对外开放存在安全风险,建议删除这一行端口映射,仅保留Docker内部网络访问:
# 注释或删除此行
# ports:
#   - "54320:5432"

二、开放服务器端口

Linux防火墙配置(以ufw为例)

执行以下命令开放前端、后端、pgAdmin的对外端口:

sudo ufw allow 5173/tcp
sudo ufw allow 5000/tcp
sudo ufw allow 5555/tcp
sudo ufw reload

iptables配置

如果使用iptables,执行:

sudo iptables -A INPUT -p tcp --dport 5173 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 5555 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4

三、云服务器安全组配置(若使用云主机)

如果是阿里云、腾讯云等云服务器,需在控制台的安全组规则中添加入站规则,允许外部访问5173、5000、5555端口,否则即使服务器防火墙开放,外部也无法访问。

四、验证访问

启动Docker Compose服务:

docker-compose up -d

之后即可通过以下地址访问各服务:

  • 前端:http://IP_Server_X:5173
  • 后端接口:http://IP_Server_X:5000/你的接口路径
  • pgAdmin:http://IP_Server_X:5555

五、可选优化

  • 使用Nginx反向代理,将前端和后端映射到80/443端口,避免暴露非标准端口,同时可配置HTTPS加密访问。
  • 将前端API地址改为相对路径(如/api),配合Nginx反向代理转发,避免IP变更后重新部署前端。

用户原始提问(中文翻译)

我已将包含backend(端口5000)、frontend(端口5173)、postgres(端口5432)、pgadmin(端口5555)四个服务的应用Docker化,将镜像推送至DockerHub后拉取到IP为IP_Server_X的远程服务器。现咨询如何通过该服务器IP将应用对外开放访问,以下是我的服务器docker-compose配置文件:

version: '2.3'

services:
  my_frontend:
    image: username/frontend:v0
    restart: always
    environment:
      - REACT_APP_API_SERVER=http://111.55.66.888:5000 # Server IP adress
    ports:
      - "5173:80"
    networks:
      - my_network
    env_file:
      - .env
    depends_on:
      - my_backend

  my_backend:
    image: username/backend:v0
    env_file:
      - .env
    command: bash -c 'while !</dev/tcp/my_db/5432; do sleep 1; done; bash run.sh'
    restart: always
    ports:
      - "5000:5000"
    networks:
      - my_network
    depends_on:
      - my_db

  my_db:
    image: username/postgres:v0
    env_file:
      - .env
    volumes:
      - /home/client/data:/var/lib/postgresql/data/pgdata
    restart: always
    ports:
      - "54320:5432"
    networks:
      - my_network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U admin -d my_db"]
      interval: 10s
      timeout: 5s
      retries: 5

  my_db_viewer:
    image: username/pgadmin:v0
    env_file:
      - .env
    restart: always
    ports:
      - "5555:5555"
    networks:
      - my_network
    depends_on:
      - my_db

networks:
  my_network:
    driver: bridge

内容的提问来源于stack exchange,提问作者Abdelouahed BEN MHAMED

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:37:28