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

Docker部署SolidJS应用后无法连接localhost:3000的问题

问题描述

我开发了一个与Django后端通信的SolidJS应用,尝试用Docker容器化前端。执行docker build构建镜像,再用docker-compose up -d启动容器后,访问localhost:3000时出现连接重置错误:

The connection has been reset
The connection to the server was reset while the page was loading.
The site may be temporarily unavailable or overloaded. Try again later;
If you cannot browse any site, check your computer's network connection;
If your computer or network is behind a firewall or proxy, make sure Firefox has permission to access the web.

相关配置

Dockerfile

FROM node:18-alpine
WORKDIR /app/frontend
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

docker-compose.yml

version: "3"
services:
  backend: ...
  frontend:
    build:
      context: ./front
      dockerfile: Dockerfile
    ports:
      - 3000:3000
    depends_on:
      - backend
  database: ...

docker inspect frontend输出

[
        {
            "Id": "sha256:e63b7ae38f071c8906affda1d15c1a7cfc5fd0501ae3a50fb5baf9affd749a18",
            "RepoTags": [
                "frontend:latest"
            ],
            "RepoDigests": [],
            "Parent": "",
            "Comment": "buildkit.dockerfile.v0",
            "Created": "2023-06-20T09:11:25.3578755Z",
            "Container": "",
            "ContainerConfig": {
                "Hostname": "",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "Tty": false,
                "OpenStdin": false,
                "StdinOnce": false,
                "Env": null,
                "Cmd": null,
                "Image": "",
                "Volumes": null,
                "WorkingDir": "",
                "Entrypoint": null,
                "OnBuild": null,
                "Labels": null
            },
            "DockerVersion": "",
            "Author": "",
            "Config": {
                "Hostname": "",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "ExposedPorts": {
                    "3000/tcp": {}
                },
                "Tty": false,
                "OpenStdin": false,
                "StdinOnce": false,
                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                    "NODE_VERSION=18.16.0",
                    "YARN_VERSION=1.22.19"
                ],
                "Cmd": [
                    "npm", "start"
                ],
                "ArgsEscaped": true,
                "Image": "",
                "Volumes": null,
                "WorkingDir": "/app/frontend",
                "Entrypoint": [
                    "docker-entrypoint.sh"
                ],
                "OnBuild": null,
                "Labels": null
            },
            "Architecture": "amd64",
            "Os": "linux",
            "Size": 384471761,
            "VirtualSize": 384471761,
            "GraphDriver": {
                "Data": {
                    "LowerDir": "/var/lib/docker/overlay2/e7pke1lm55bwj3f23ud7bvfk7/diff:/var/lib/docker/overlay2/6zw0grx5i2q6njdy217bopd9f/diff:/var/lib/docker/overlay2/268zgs2pnulrhkpztql5bv9w9/diff:/var/lib/docker/overlay2/ff1f8ebc30e49a9e6d5cbc9e05951d4efa6bb0e84281950a92ca7d8207e4379c/diff:/var/lib/docker/overlay2/eefcc57bd194a7de78d019b92dee4ebdd81ff2cb418c2753322a3e04f860d81b/diff:/var/lib/docker/overlay2/bfa75f821ad0971bb0d6da3f6327f34590a55137bd712a4b0bed92075cfd60d2/diff:/var/lib/docker/overlay2/1d84f525730defee501d69ed6bc3d2b2b74eceb52b630db7fb6aa8a464af9f4a/diff",    
                    "MergedDir": "/var/lib/docker/overlay2/mji5toy5ry18rzqusemmks2uc/merged",        
                    "UpperDir": "/var/lib/docker/overlay2/mji5toy5ry18rzqusemmks2uc/diff",
                    "WorkDir": "/var/lib/docker/overlay2/mji5toy5ry18rzqusemmks2uc/work"
                },
                "Name": "overlay2"
            },
            "RootFS": {
                "Type": "layers",
                "Layers": [
                    "sha256:78a822fe2a2d2c84f3de4a403188c45f623017d6a4521d23047c9fbb0801794c",       
                    "sha256:4f4b74c286d22999d55b839578454a634b9b7879dff5fb3ba880be1f0a745596",       
                    "sha256:04c82a4955a1c02df97f16828b6be2b55f67f1130199fd0ec6fcbe734d47b444",       
                    "sha256:370f4ccb18d741bb12117359cb5accb6191f8cc98e56b284b6fb2cf4e75f8ca2",       
                    "sha256:4678b49dfd54b8e2d4d161fad903d77b5c39af2f304dfc5bf5b126eb00efdea8",       
                    "sha256:45b01810f498eaa0ad6df7afe8e303b57c763fde59ef6bab8eb377c24c2c6c99",       
                    "sha256:3395040bcffc8010976fbfc312039c5652e7c39e5c6d1b2ca5fbe196711a2461",       
                    "sha256:de495181ee371615363f505d537425237a12f3942dce373fb39c2b350c56cc25"        
                ]
            },
            "Metadata": {
                "LastTagTime": "2023-06-20T09:11:25.446862Z"
            }
        }
    ]
解决方案

1. 修改SolidJS服务器绑定地址

SolidJS默认开发服务器仅绑定localhost,容器内的localhost无法被宿主机访问。需要修改启动命令,让服务器监听所有网卡:
打开项目根目录的package.json,调整start脚本:

"scripts": {
  "start": "vite --host 0.0.0.0"
}

(如果是create-solid默认模板,启动命令基于Vite,添加--host 0.0.0.0即可)

2. 检查容器运行状态

执行以下命令查看frontend容器是否正常启动:

docker-compose ps

如果容器状态不是Up,查看启动日志定位问题:

docker-compose logs frontend

3. 验证容器内部端口监听

进入容器内部,检查3000端口是否被进程占用:

docker exec -it <容器ID> sh
netstat -tulpn | grep 3000

如果没有输出,说明服务器未正常启动,需排查启动命令或代码错误。

4. 优化Docker构建流程(可选)

  • 添加.dockerignore文件排除冗余内容,减少构建体积:
    node_modules
    dist
    .git
    .env
    
  • 修改Dockerfile使用更稳定的依赖安装命令:
    FROM node:18-alpine
    WORKDIR /app/frontend
    COPY package*.json ./
    RUN npm ci --only=production
    COPY . .
    EXPOSE 3000
    CMD ["npm", "start"]
    

5. 排查宿主机端口冲突

确认宿主机3000端口未被其他进程占用:

# Linux/macOS
lsof -i :3000
# Windows
netstat -ano | findstr :3000

如果端口被占用,修改docker-compose.yml中的端口映射(比如改为3001:3000),再重新启动容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 17:54:55