无法访问运行React客户端的Docker容器的IP地址

时间:2020-08-10 00:37:57

标签: reactjs docker docker-compose

运行docker-compose up --build之后,无法访问运行我的React客户端的容器。以下是输出的日志:

client_1      | ℹ 「wds」: Project is running at http://172.18.0.4/
client_1      | ℹ 「wds」: webpack output is served from 
client_1      | ℹ 「wds」: Content not from webpack is served from /app/public
client_1      | ℹ 「wds」: 404s will fallback to /
client_1      | Starting the development server...

奇怪的是,显示上述内容后,我的终端向我显示了我的React代码中的警告和错误。当我尝试在浏览器中访问IP地址http://172.18.0.4/时,它根本无法加载。我已经尝试过localhost:3000,它是Reacts的默认端口,没有任何作用。

我已经尝试通过运行docker-run -it container-id sh来查看实际的容器,并且客户端运行所需的所有文件都已存在。我不太确定怎么了。任何帮助将不胜感激!下面是我的开发Dockerfile和Docker Compose文件。

docker-compose.yml

version: '3'
services:
  postgres:
    image: 'postgres:latest'
    environment:
      - POSTGRES_PASSWORD=postgres_password
  api:
    build:
      dockerfile: Dockerfile.dev
      context: ./server
    # To have a reference to local file system
    volumes:
      - /app/node_modules
      - ./server:/app      
    environment:
      - PGUSER=postgres
      - PGHOST=postgres
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=postgres_password
      - PGPORT=5432
    depends_on:
      - postgres
  client:
    stdin_open: true
    build:
      dockerfile: Dockerfile.dev
      context: ./client
    volumes:
      - /app/node_modules
      - ./client:/app
  rtmpserver:
    build:
      dockerfile: Dockerfile.dev
      context: ./rtmpserver
    volumes:
      - /app/node_modules
      - ./rtmpserver:/app

Dockerfile.dev

FROM node:alpine
WORKDIR '/app'
COPY ./package.json ./
RUN npm install
COPY . .
CMD ["npm","run", "start"]

编辑:
我已经运行了以下命令docker run -p 3000:3000 -v /app/node_modules -v "$(pwd):/app" container-id,并得到了以下结果。

npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /app/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent 

这没有任何意义,因为所有文件都在容器中。

1 个答案:

答案 0 :(得分:0)

您不能使用容器IP(http://172.18.0.4/)从外部docker网络访问您的服务。您需要在Docker文件中公开端口,然后使用localhost:3000进行访问。

b

在docker-compose.yml中添加端口映射

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