gpt4 book ai didi

docker - 如何通过docker-compose网络将前端连接到后端

转载 作者:行者123 更新时间:2023-12-02 19:03:10 25 4
gpt4 key购买 nike

我正在尝试将我的angular + express应用程序 jetty 化。我有一个可以创建两个容器的docker-compose文件,并且可以从主机(使用浏览器)访问这些容器,但是只要尝试从http中访问后端,我都会得到一个“ERR_NAME_NOT_RESOLVED”我的前端提出的要求。

我查了一下这个问题,似乎大多数人都建议服务名称和容器端口应该足以在同一个网络上连接另一个容器。我尝试打“http://express:8000/user?user=030f0e70-9a8f-11e9-b5d1-f5cb6c0f3616”,考虑到我从其他地方看到的内容,我认为它应该可以工作,但是无论如何,我都会遇到相同的错误。

我的docker-compose文件看起来像

version: '3' # specify docker-compose version

# Define the services/containers to be run
services:
angular: # name of the first service
build: ./ # specify the directory of the Dockerfile
ports:
- "4200:80" # specify port forewarding
links:
- "express"
depends_on:
- "express"

express: #name of the second service
build: # specify the directory of the Dockerfile
context: ./
dockerfile: dockerfile.be
ports:
- "8000:8000" #specify ports forewarding
expose:
- "8000"

理想情况下,我希望前端能够通过设置的终结点访问另一个容器,因此我可以以最小的更改来部署应用程序。我将不胜感激任何建议。我感觉好像缺少了一些非常简单的东西,但是经过几个小时的修补,我仍然没有捕获它。

谢谢!

最佳答案

实际上,您的流量是下一个:

  • 来自angular container的用户浏览器请求页面,然后所有页面都将呈现到用户的浏览器。
  • 使用angular HttpClientexpress contaner提取数据的前端javascript代码。

    那时,尽管docker-compose为您建立了一个自定义网络,该网络可以使auto-dns解析angularexpress,但是此dns仅在容器中起作用,而对主机无效。

    但是,调用augular HttpClienthttp://express发生在用户的浏览器中,而不是在容器中,因此auto-dns肯定无法为您解析名称express

  • 对于您来说,如果您只想从docker主机打开浏览器,则可以使用 localhost,但是如果您还希望其他计算机上的用户访问您的网络,则必须使用dockerhost的ip。

    然后,在 angular HttpClient中,您需要使用 http://your_dockerhost_ip:8000之类的东西来访问快速容器。

    如果有兴趣,您可以访问 this来查看 User-defined bridges provide automatic DNS resolution between containers

    关于docker - 如何通过docker-compose网络将前端连接到后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56879017/

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