我有这个docker-compose.yml,它基本上构建了我的e2e测试项目 . 它由一个postgres数据库,一个后端节点应用程序,一个前端节点应用程序和一个使用cypress运行e2e测试的规范应用程序组成 . 版本:'3'
services:
database:
image: 'postgres'
backend:
build: ./backend
command: /bin/bash -c "sleep 3; yarn backpack dev"
depends_on:
- database
frontend:
build: ./frontend
command: /bin/bash -c "sleep 15; yarn nuxt"
depends_on:
- backend
spec:
build:
context: ./frontend
dockerfile: Dockerfile.e2e
command: /bin/bash -c "sleep 30; yarn cypress run"
depends_on:
- frontend
- backend
Dockerfiles只是基于节点的简单Dockerfiles:8复制项目文件并运行 yarn install
. 在规范Dockerfile中,我将 http://frontend:3000
传递为FRONTEND_URL .
但是当我的cypress运行器无法连接到 frontend
时,此设置在 spec
命令时失败:
spec_1 | > Error: connect ECONNREFUSED 172.20.0.4:3000
正如您所看到的,它正确地将主机名 frontend
解析为IP,但它为什么我无法连接到具有服务名称的前端 . 如果我在 spec
上切换命令做 sleep 30; ping frontend
,它's successfully pinging the container. I'已尝试删除并让docker-compose重新创建网络,我已经尝试分别为服务指定 expose
和 links
. 一切都没有成功 .
如果你想尝试复制这个问题,我在这里设置了一个样本仓库:https://github.com/afifsohaili/demo-dockercompose-network
任何帮助是极大的赞赏!谢谢!
1 回答
您的应用程序正在侦听环回:
从容器外部,您无法连接到仅侦听环回的端口(
127.0.0.1
) . 您需要重新配置应用程序以侦听所有接口(0.0.0.0
) .对于您的应用程序,在package.json中,您可以添加(根据nuxt faq):
然后你应该看到:
而不是一个无法访问的错误,你现在得到500: