gpt4 book ai didi

docker - 如何链接前端和后端Docker容器

转载 作者:行者123 更新时间:2023-12-02 17:36:13 26 4
gpt4 key购买 nike

我目前正在使用Postgresql作为数据库开发Spring Boot reactJs应用程序。我的Spring和reactJs应用程序位于两个单独的项目中。我试图使用docker-compose将应用程序进行docker化。因此,在服务器端,我在docker-compose文件中定义了我的postgresql服务和springboot服务。
哪一个

version: '3'
services:
app:
image: app
depends_on:
- mypostgres
ports:
- "9000:8086"
environment:
- DATABASE_HOST=mypostgres
- DATABASE_USER=root
- DATABASE_PASSWORD=root
- DATABASE_NAME=test
- DATABASE_PORT=5432



mypostgres:
image: postgres:9.6-alpine
container_name: mypostgres

ports:
- "5433:5432"

environment:
- POSTGRES_PASSWORD=root
- POSTGRES_USER=root
- POSTGRES_DB=irooldb
volumes:
- ./postgres-data:/var/lib/postgresql/data

对于 Client side,我没有使用docker-compose,我只添加了一个Dockerfile
并在单独的容器中运行我的客户端应用程序。

我的问题是:

如何将我的客户端容器链接到服务器端容器?

是否应该在服务器端项目中的docker-compose文件中定义客户端服务?或者他们分开运行还可以吗?

最佳答案

should I define a client service in the docker-compose file situated in the server side project?



这是一种选择,这可能是最简单,最直接的方法。默认情况下,docker-compose会为您根据docker-compose.yml定义的服务设置docker网络。由于所有服务都在同一网络上,因此它们可以通过主机名相互解析,即您的客户端应用程序将到达类似于 http://app:9000/api/login/的后端,您可以在其中使用docker-compose服务名称作为主机。

Or is it okay that they run sepratly ?



如果需要,可以单独运行它们。您将需要做一些修改以确保前端可以到达后端。两种选择是:
  • 手动创建docker bridge网络Here are the docs for that。您只想使用docker network createadd that network in your docker-compose定义一个网络,并确保在使用docker run选项对其进行--network时将前端容器放在同一网络中。同样,您可以在docker-compose.yml中定义一个新网络,跳过手工创建的过程,然后将前端容器放入该网络中。

  • 这些#1选项中的任何一个最终都变得很脆弱,因为您需要在运行前端(或可能是docker-compose堆栈)之前确保网络已经存在。无论如何,这是一个选择。

    在网桥模式下(这是网络模式的默认设置),在您的容器中引用localhost不会引用您的主机。例如,来自前端的 curl localhost:9000将尝试 curl 端口9000上的前端容器。来自应用程序服务的 curl localhost:9000应该成功,因为它正在 curl 。
  • 使用主机网络驱动程序which will put your containers on your host network by removing the Docker network isolation。然后,所有内容都将使用localhost:<port>互相交谈。

  • 如果您没有很好的理由将前端保持在docker-compose.yml之外,我建议您只在此处添加它并完成。这样做将使很多想法转移到docker-compose上。如果您使用CI管道,它的伸缩性也将更好,并且因为它都放在一个整洁的程序包中,所以更容易移交给另一个开发人员。祝你好运!

    关于docker - 如何链接前端和后端Docker容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50760905/

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