docker compose can';t通过服务名称连接到相邻服务
我有一个docker-compose.yml,它基本上为e2e测试构建了我的项目。它由一个postgres db、一个后端节点应用程序、一个前端节点应用程序和一个使用cypress运行e2e测试的spec应用程序组成。 版本:“3”docker compose can';t通过服务名称连接到相邻服务,docker,docker-compose,cypress,docker-network,Docker,Docker Compose,Cypress,Docker Network,我有一个docker-compose.yml,它基本上为e2e测试构建了我的项目。它由一个postgres db、一个后端节点应用程序、一个前端节点应用程序和一个使用cypress运行e2e测试的spec应用程序组成。 版本:“3” services: database: image: 'postgres' backend: build: ./backend command: /bin/bash -c "sleep 3; yarn back
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
DockerFile只是基于node:8的简单DockerFile,node:8复制项目文件并运行Thread install
。在spec Dockerfile中,我传递http://frontend:3000
作为前端URL
但当my cypress runner无法连接到前端时,此设置在spec
命令下失败,错误为:
spec_1 | > Error: connect ECONNREFUSED 172.20.0.4:3000
如您所见,它将主机名frontend
正确解析为IP,但无法连接。我在琢磨为什么我不能用服务名称连接到前端。如果我打开spec
执行sleep 30;ping前端
,它正在成功ping容器。我尝试删除并让docker compose重新创建网络,我尝试分别指定服务的expose
和links
。一切都没有成功
如果您想复制该问题,我已在此处设置了一个示例回购:
非常感谢您的帮助!谢谢大家! 您的应用程序正在侦听环回:
$ docker run --rm --net container:demo-dockercompose-network_frontend_1 nicolaka/netshoot ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.11:35233 *:*
LISTEN 0 128 127.0.0.1:3000 *:*
从容器外部,无法连接到仅侦听环回的端口(127.0.0.1
)。您需要重新配置应用程序以侦听所有接口(0.0.0.0
)
对于您的应用程序,在package.json中,您可以添加(根据以下内容):
那么你应该看到:
$ docker run --rm --net container:demo-dockercompose-network_frontend_1 nicolaka/netshoot ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:3000 *:*
LISTEN 0 128 127.0.0.11:39195 *:*
现在,您将得到一个500:
...
frontend_1 | response: undefined,
frontend_1 | statusCode: 500,
frontend_1 | name: 'NuxtServerError' }
...
spec_1 | The response we received from your web server was:
spec_1 |
spec_1 | > 500: Server Error
谢谢它正在工作。p、 我还用更新的工作解决方案更新了演示github repo。只是与之前的提交不同,看看我做了什么。
...
frontend_1 | response: undefined,
frontend_1 | statusCode: 500,
frontend_1 | name: 'NuxtServerError' }
...
spec_1 | The response we received from your web server was:
spec_1 |
spec_1 | > 500: Server Error