我有这个 docker-compose.yml,它基本上构建了我的 e2e 测试项目。它由一个 postgres 数据库、一个后端 Node 应用程序、一个前端 Node 应用程序和一个使用 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,它基于 node:8 复制项目文件并运行yarn install
. 在规范 Dockerfile 中,我http://frontend:3000
作为 FRONTEND_URL 传递。
spec
但是当我的 cypress runner 无法连接到frontend
错误时,此设置在命令中失败:
spec_1 | > Error: connect ECONNREFUSED 172.20.0.4:3000
如您所见,它将主机名frontend
正确解析为 IP,但无法连接。我正在为为什么不能使用服务名称连接到前端而摸不着头脑。如果我打开命令spec
do sleep 30; ping frontend
,它会成功 ping 容器。我试过删除并让 docker-compose 重新创建网络,我试过分别指定expose
和links
服务。一切都没有成功。
如果你想尝试复制问题,我在这里设置了一个示例 repo: https ://github.com/afifsohili/demo-dockercompose-network
任何帮助是极大的赞赏!谢谢!