【发布时间】:2018-08-02 12:59:37
【问题描述】:
我有这个 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 传递。
但是当我的 cypress runner 无法连接到 frontend 并出现错误时,此设置在 spec 命令中失败:
spec_1 | > Error: connect ECONNREFUSED 172.20.0.4:3000
如您所见,它将主机名frontend 正确解析为IP,但无法连接。我正在为为什么不能使用服务名称连接到前端而摸不着头脑。如果我将spec 上的命令切换为sleep 30; ping frontend,它会成功ping 容器。我尝试删除并让 docker-compose 重新创建网络,我尝试分别为服务指定 expose 和 links。一切都没有成功。
如果您想尝试复制问题,我已在此处设置了示例存储库: https://github.com/afifsohaili/demo-dockercompose-network
非常感谢任何帮助!谢谢!
【问题讨论】:
标签: docker docker-compose cypress docker-network