为什么通过 docker 启动 React 时会收到 ERR_EMPTY_RESPONSE ?

Ome*_*gon 9 docker reactjs

我有这样的应用程序结构:

react-client
server
docker-compose.yaml
Run Code Online (Sandbox Code Playgroud)

golang 服务器通常在 docker 中启动。现在我想在那里运行反应。这是我的 docker 文件react-client

FROM node:alpine
WORKDIR /app/react
COPY package.json /app/react
COPY package-lock.json /app/react
COPY . /app/react
EXPOSE 3001
RUN npm i
CMD ["npm", "run", "start"]
Run Code Online (Sandbox Code Playgroud)

我的 docker-compose 文件:

version: '3'

services:
    postgres:
        image: postgres:12
        restart: always
        ports:
            - '5432:5432'    
        volumes:
            - ./db_data:/var/lib/postgresql/data
            - ./server/scripts/init.sql:/docker-entrypoint-initdb.d/create_tables.sql
        env_file:
            - ./server/config/.env    
        healthcheck:
            test: [ "CMD", "pg_isready", "-q", "-d", "devdb", "-U","postgres" ]
            timeout: 45s
            interval: 10s
            retries: 10
    redis:
        image: redis:6.2
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock      
        ports:
          - 6379:6379 
    prometheus:
        image: "prom/prometheus:v2.21.0"
        ports:
          - "9090:9090"
        command:
          - "--config.file=/etc/prometheus/prometheus.yml"
        volumes:
          - "./server/metrics/prometheus.yml:/etc/prometheus/prometheus.yml:ro"
    grafana:
        image: grafana/grafana:6.1.6
        environment:
          - GF_AUTH_DISABLE_LOGIN_FORM=true
          - GF_AUTH_ANONYMOUS_ENABLED=true
          - GF_AUTH_ANONYMOUS_ORG_NAME=Main Org.
          - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
          - GF_USERS_ALLOW_SIGN_UP=false
        ports:
          - "3000:3000"
        volumes:
          - ./grafana/provisioning:/etc/grafana/provisioning
          - ./grafana/dashboards:/var/lib/grafana/dashboards
    web-client:
        build:
          context: ./react-client
          dockerfile: Dockerfile
        ports:
          - "3001:3001"
    app:
        build: 
          context: ./server
          dockerfile: Dockerfile
        ports:
          - 8080:8080
        depends_on:
          - postgres
          - redis
Run Code Online (Sandbox Code Playgroud)

现在,当你启动 docker 时,当我进入时,localhost:3001我收到一个错误: ERR_EMPTY_RESPONSE

我不知道出了什么问题。如果我在没有反应的情况下运行 docker 并通过它运行它,npm start那么一切都会正常。也许不知何故整个项目都没有被复制?

编辑

我尝试这样做

web-client:
        build:
          context: ./react-client
          dockerfile: Dockerfile
        ports:
          - "127.0.0.1:3001:3001"
Run Code Online (Sandbox Code Playgroud)

但一切都没有改变

我在端口 3000 上单独启动了反应,并且启动正常。显然在端口 3001 上启动时发生了某种错误,但不清楚出了什么问题

Sla*_*sky 1

我建议你为react-client构建一个镜像并手动启动一个容器。首先更改你的 Dockerfile:

FROM node:alpine
WORKDIR /app/react
COPY . .
EXPOSE 3001
RUN npm i
CMD ["npm", "run", "start"]
Run Code Online (Sandbox Code Playgroud)
  • 然后进入react-client目录并运行docker build -t test .
  • 启动容器:docker run -d --name mytest -p 3001:3001 test
  • 检查日志:docker logs mytest
  • 检查整个项目是否被复制:docker run --rm test ash -c "find /app/react -type f -print0 | xargs -0 ls -t"