我正在努力理解如何访问作为 docker-compose
服务的一部分运行的其他容器。
我看到了很多答案谈论在其他容器中通过服务名称访问容器,但也有很多教程仅使用暴露端口的本地主机。
所以我只是想搞清楚什么时候使用哪个方法,以及为什么它能够工作。
我的样例应用程序是:https://github.com/daniil/full-stack-js-docker-tutorial
其中,我有一个将ui和api服务映射在一起的NGINX服务器,但事后我意识到,在我的React容器(3000:3000)中,我实际上可以通过对http://localhost:5050
进行axios请求来访问Express容器(5050:5050)。
但同时,如果我尝试通过localhost连接到我的MySQL容器(9906:3306),它不起作用,我必须使用db
作为主机,即容器名称。
有人能帮我理解它是如何工作的吗:
- 什么时候可以使用
http://localhost:SERVICE_PORT
,它是否适用于React服务,因为它是浏览器请求?即:axios - 为什么我不能在React / axios请求中使用
http://api:5050
,是因为没有主机解析吗? - 为什么我不能使用
http://localhost:9906|3306
来连接我的db服务? - NGINX反向代理将客户端和api绑定在一起的目的或好处是什么,如果你实际上不需要在两者之间有任何东西,因为本地主机似乎可以工作?
- 如果容器应该是隔离的,那么为什么从我的React容器中的
localhost:5050
仍然可以看到在另一个容器中运行的API服务器在5050上运行? - 其他可帮助我理解跨容器通信方式的一般规则