Docker容器之间怎么互相访问?我配了自定义网络还是连不上

码农春荣 阅读 3

我在本地用 Docker 启动了两个服务:一个前端 React 应用,一个后端 Express API。我把它们都加到了同一个自定义 bridge 网络里,按理说应该能通过容器名互相通信,但前端死活请求不到后端。

我试过在前端代码里用 http://backend:3001/api 去请求,也确认两个容器都在同一个网络下(用 docker network inspect mynet 看过了),但浏览器控制台一直报 net::ERR_NAME_NOT_RESOLVED。是不是哪里配置错了?

我的 docker-compose.yml 长这样:

version: '3'
services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - mynet

  backend:
    build: ./backend
    ports:
      - "3001:3001"
    networks:
      - mynet

networks:
  mynet:
    driver: bridge
我来解答 赞 0 收藏
二维码
手机扫码查看
1 条解答
小熙妍
小熙妍 Lv1
遇到这个问题,首先得检查几个地方。虽然你在同一个自定义网络下,但有时候还是会出现一些小坑。

首先,确保你的后端服务确实在监听 3001 端口。有时候服务启动后可能没有正确绑定端口,或者有错误日志。

其次,检查下 docker-compose.yml 文件是否正确启动了所有服务。可以试试用 docker-compose up --build 来重新构建并启动服务,确保没有遗漏。

最后,确认下容器是否正确启动并且健康运行。可以用 docker ps 查看所有正在运行的容器,确保 frontend 和 backend 都在列。

还有一点要注意,如果你是从浏览器访问前端,那么浏览器只能看到映射到主机的端口,不能直接通过容器名访问 backend。所以你需要在前端代码中使用 host 的 IP 地址或者 localhost(如果你在本地测试)加上正确的端口号。

不过既然你说配置了自定义网络,理论上应该可以通过容器名访问。你可以尝试在 frontend 容器内部 ping 一下 backend 容器名,看看能不能通。方法是先进入 frontend 容器的 shell,然后执行 ping backend,如果能 ping 通,那就是前端代码里可能有什么问题;如果 ping 不通,那就要检查网络配置了。

性能上,确保网络配置正确后,再考虑其他优化手段,比如使用 Docker 的 DNS 设置来加速容器间通信。但目前看来,先解决连接问题更重要。
点赞
2026-03-24 20:08