在浏览器上运行的客户端无法访问同一 docker-compose 容器内的 API

问题描述 投票:0回答:1

我有一个带有客户端、API 服务器和 cypress 的 docker-compose 容器。一旦我在容器内运行 cypress 测试,它就能够打开浏览器并访问客户端。但是,一旦客户端向服务器发出 API 调用,它就会失败并返回“网络请求失败”。我在客户端使用的 API URL 是“http://server:8888”,而且这三个容器位于同一个 docker-compose 网络中。

我用来运行 cypress 测试的命令:“docker-compose run cypress npx cypress run --config baseUrl=http://client:8080 --headless”

可能出了什么问题?

这是我的 docker-compose.yaml 的样子

version: '3.3'
  services:
   server:
    image: docker-image-url.com/org/server-api:v0.0.2
   ports:
     - "8888:8888"
   networks:
     - spb_net
   client:
    image: client-web:0.0.50
    ports:
      - "3000:8080"
    depends_on: 
      - server
    networks:
      - spb_net
   cypress:
    image: cypress-test:0.0.36
    ports:
      - "5000:5000"
    depends_on:
      - client
    networks:
      - spb_net
  networks:
   spb_net: 

当我使用curl检查来自客户端容器“curl -v http://server:8888”的连接时,它能够建立连接。

我尝试从主机访问客户端和服务器容器,它们工作正常。

reactjs docker testing docker-compose cypress
1个回答
0
投票

由于您还声明了一个网络,因此您需要

expose
容器的端口,请尝试如下操作:

version: '3.3'
  services:
    server:
      image: docker-image-url.com/org/server-api:v0.0.2
      ports:
        - "8888:8888"
      expose:
        - "8888"
      networks:
        - spb_net

    client:
      image: client-web:0.0.50
      ports:
        - "3000:8080"
      expose:
        - "8080"
      depends_on: 
        - server
      networks:
        - spb_net

    cypress:
      image: cypress-test:0.0.36
      ports:
        - "5000:5000"
      expose:
        - "5000"
      depends_on:
        - client
      networks:
        - spb_net
  networks:
   spb_net:  
© www.soinside.com 2019 - 2024. All rights reserved.