我目前正在使用Postgresql作为数据库开发Spring Boot
和 reactJs应用程序。我的Spring和我的reactJs应用程序分为两个单独的项目。我尝试使用docker-compose将我的应用程序停靠。所以在服务器端我有dockgresql和docker-compose文件中定义的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
并在一个单独的容器中运行我的客户端应用程序。
我的问题是:
如何将我的客户端Container链接到我的服务器端容器?
我应该在位于服务器端项目中的docker-compose文件中定义客户端服务吗?或者他们可以分开运行吗?
答案 0 :(得分:0)
让它们分开运行是可以的。
您需要通过将前端和后端放置在同一个docker网络中来连接它们(您不需要将db放入该网络中)。
只需手动创建独立网络,然后在docker-compose中引用它external
- 对于后端和前端也是如此。然后,您将能够使用服务名称与后端进行前端对话。
前端-搬运工-compose.yml:
services:
frontend:
networks:
project_network:
networks:
project_network:
external: true
于后端的搬运工-compose.yml:
services:
app:
networks:
project_network:
networks:
project_network:
external: true
docker network create --attachable project_network
答案 1 :(得分:0)
我应该在位于服务器端项目的docker-compose文件中定义客户端服务吗?
这是一个选项,这可能是最简单,最直接的选择。默认情况下,docker-compose为每个docker-compose.yml定义的服务设置一个docker网络。由于所有服务都在同一网络上,因此它们可以通过主机名相互解析,即您的客户端应用程序将到达后端,如http://app:9000/api/login/
,您可以使用docker-compose服务名称作为主机。
或者他们可以分开进行吗?
如果你愿意,可以单独运行它们。您将需要做一些修改以确保前端可以到达后端。有两种选择:
docker network create
,add that network in your docker-compose来定义网络,并确保在docker run
使用{{1}时将前端容器放在同一网络中}} 选项。同样,您可以在docker-compose.yml中定义一个新网络,跳过手工创建它,并将您的前端容器放在该网络中。 这些#1选项中的任何一个最终都会变脆,因为在运行前端或者可能是docker-compose堆栈之前,您需要确保网络在那里。无论如何,这是一个选择。
在桥接模式(默认为网络模式)下,引用容器中的localhost不会引用您的主机。例如,来自您的前端的--network
将尝试在端口9000上卷曲前端容器。来自您的应用服务的curl localhost:9000
应该会成功,因为它会卷曲自己。
curl localhost:9000
来互相交流。如果您没有将前端保持在docker-compose.yml之外的良好案例,我建议您将其添加到那里并完成。这样做会将很多想法转移到docker-compose上。如果你使用CI管道,它也会更好地扩展,并且更容易交给另一个开发人员,因为它都在一个整洁的包中。祝你好运!