基于多租户架构的两个 docker 容器之间的通信
Communication between two docker containers based on multi-tenant architecture
我有两个 django 项目(微服务),运行 在单独的 docker 容器中。两个项目都在使用 django-tenant-schemas。如何在 url http://boohoo.site.com:18150/api/me/
、[=13= 上将 serice-bar 的请求发送到 service-foo ]是project-a的PORT?我需要使用租户 url 以便 project-a 可以验证租户并处理请求。
我可以使用容器名称发送请求,但这不起作用,因为如果我使用 http://site.foo:18150/api/me
,它会成功发送请求,但没有定义为 site.foo
的租户。
这是docker-compose.yml
:
version: '3.3'
services:
db:
container_name: site.postgres
image: postgres
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
foo:
container_name: site.foo
build:
context: ../poll
command: python /app/foo/src/manage.py runserver 0.0.0.0:18150
depends_on:
- db
environment:
- DB_HOST=site.postgres
- DJANGO_SETTINGS_MODULE=main.settings.dev
stdin_open: true
tty: true
ports:
- "18150:18150"
bar:
container_name: site.bar
build:
context: ../toll
command: python /app/bar/src/manage.py runserver 0.0.0.0:18381
depends_on:
- db
environment:
- DB_HOST=site.postgres
- DJANGO_SETTINGS_MODULE=main.settings.dev
stdin_open: true
tty: true
ports:
- "18381:18381"
您可以在默认(或任何其他...)网络上使用别名来执行此操作。有关此功能的更多信息,请参阅 documentation。我检查了一下,您当前的撰写文件版本 (3.3) 支持这一点,但我建议您尽可能升级到支持的最新版本 (3.7)。
为了简洁起见,我只在下面复制修改后的 foo
服务声明,其中我只添加了必要的 networks
节。
foo:
container_name: site.foo
build:
context: ../poll
command: python /app/foo/src/manage.py runserver 0.0.0.0:18150
depends_on:
- db
environment:
- DB_HOST=site.postgres
- DJANGO_SETTINGS_MODULE=main.settings.dev
networks:
default:
aliases:
- boohoo.site.com
stdin_open: true
tty: true
ports:
- "18150:18150"
此更改后,您的 foo
服务容器将可以从同一网络上的任何其他容器通过 foo
(服务名称)、site.foo
(您的自定义容器名称)或 boohoo.site.com
(网络别名)。
我有两个 django 项目(微服务),运行 在单独的 docker 容器中。两个项目都在使用 django-tenant-schemas。如何在 url http://boohoo.site.com:18150/api/me/
、[=13= 上将 serice-bar 的请求发送到 service-foo ]是project-a的PORT?我需要使用租户 url 以便 project-a 可以验证租户并处理请求。
我可以使用容器名称发送请求,但这不起作用,因为如果我使用 http://site.foo:18150/api/me
,它会成功发送请求,但没有定义为 site.foo
的租户。
这是docker-compose.yml
:
version: '3.3'
services:
db:
container_name: site.postgres
image: postgres
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
foo:
container_name: site.foo
build:
context: ../poll
command: python /app/foo/src/manage.py runserver 0.0.0.0:18150
depends_on:
- db
environment:
- DB_HOST=site.postgres
- DJANGO_SETTINGS_MODULE=main.settings.dev
stdin_open: true
tty: true
ports:
- "18150:18150"
bar:
container_name: site.bar
build:
context: ../toll
command: python /app/bar/src/manage.py runserver 0.0.0.0:18381
depends_on:
- db
environment:
- DB_HOST=site.postgres
- DJANGO_SETTINGS_MODULE=main.settings.dev
stdin_open: true
tty: true
ports:
- "18381:18381"
您可以在默认(或任何其他...)网络上使用别名来执行此操作。有关此功能的更多信息,请参阅 documentation。我检查了一下,您当前的撰写文件版本 (3.3) 支持这一点,但我建议您尽可能升级到支持的最新版本 (3.7)。
为了简洁起见,我只在下面复制修改后的 foo
服务声明,其中我只添加了必要的 networks
节。
foo:
container_name: site.foo
build:
context: ../poll
command: python /app/foo/src/manage.py runserver 0.0.0.0:18150
depends_on:
- db
environment:
- DB_HOST=site.postgres
- DJANGO_SETTINGS_MODULE=main.settings.dev
networks:
default:
aliases:
- boohoo.site.com
stdin_open: true
tty: true
ports:
- "18150:18150"
此更改后,您的 foo
服务容器将可以从同一网络上的任何其他容器通过 foo
(服务名称)、site.foo
(您的自定义容器名称)或 boohoo.site.com
(网络别名)。