gpt4 book ai didi

docker-compose 无法通过服务名称连接到相邻服务

转载 作者:行者123 更新时间:2023-12-02 00:59:26 30 4
gpt4 key购买 nike

我有这个 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要做 sleep 30; ping frontend ,它正在成功地ping容器。我尝试删除并让 docker-compose 重新创建网络,我尝试指定 exposelinks分别到服务。一切都没有成功。

如果您想尝试复制问题,我在这里设置了一个示例存储库:
https://github.com/afifsohaili/demo-dockercompose-network

任何帮助是极大的赞赏!谢谢!

最佳答案

您的应用程序正在监听环回:

$ 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) 的端口。您需要重新配置应用程序以监听所有接口(interface) ( 0.0.0.0)。

对于您的应用,在 package.json 中,您可以添加(根据 nuxt faq ):
  "config": {
"nuxt": {
"host": "0.0.0.0",
"port": "3000"
}
},

然后你应该看到:
$ 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

关于docker-compose 无法通过服务名称连接到相邻服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51654328/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com