小编dan*_*iil的帖子

Docker Compose 通过 localhost 访问另一个容器

我正在尝试思考如何访问作为docker-compose服务一部分运行的其他容器。

我见过很多关于通过其他容器内的服务名称访问容器的答案,但也有很多教程只是使用带有公开端口的本地主机。

所以我只是想弄清楚何时使用哪个以及为什么它会这样工作。

我的示例应用程序是:https ://github.com/daniil/full-stack-js-docker-tutorial

在其中,我有一个 NGINX 服务器将 ui 和 api 服务映射在一起,但事后我意识到,在我的 React 容器 (3000:3000) 内部,我实际上可以通过以下方式访问 Express 容器 (5050:5050)向 发送 axios 请求http://localhost:5050

但同时如果我尝试通过本地主机连接到我的 MySQL 容器(9906:3306),它不起作用,我必须用作db主机,即容器名称。

有人可以帮我理解这一切是如何运作的吗:

  • 我什么时候可以使用http://localhost:SERVICE_PORT,它是否可以在 React 服务中工作,因为它是浏览器请求?即:axios
  • 为什么我不能http://api:5050在 React / axios 请求内部使用,是因为没有主机解析吗?
  • 为什么我无法http://localhost:9906|3306连接到我的数据库服务?
  • 如果由于 localhost 似乎可以工作而实际上不需要中间的任何内容,那么 NGINX 反向代理将客户端和 api 连接在一起的目的或好处是什么?
  • 如果容器应该是隔离的,那么为什么localhost:5050从我的 React 容器中仍然可以看到 API 服务器在另一个容器中的 5050 上运行?
  • 其他可以帮助我理解跨容器通信如何工作的一般规则

docker docker-compose docker-network

3
推荐指数
1
解决办法
7119
查看次数

标签 统计

docker ×1

docker-compose ×1

docker-network ×1