我有一个带有客户端、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”的连接时,它能够建立连接。
我尝试从主机访问客户端和服务器容器,它们工作正常。
由于您还声明了一个网络,因此您需要
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: