Я звонил своему местоположению-контенту API, используя топор ios от node.js docker до django docker, и я получаю ответ:
{
"id": 1,
"name": "soeta",
"description": null,
"contents": [
{
"id": 1,
"title": "any",
"image_raw": "http://inventory:8003/media/content/images/QWzcJDiseGbEAvyEa4aRZU.jpg",
"is_featured": false,
"location": 1
}
]
}
как вы видите, ответ image_raw
получил неправильный домен. Он получил docker псевдоним хоста external_link (инвентарь) вместо localhost
. Я пытаюсь разобрать ответ на внешний интерфейс, но внешний интерфейс не загружает изображение из-за неправильного URL-адреса изображения домена. Он прекрасно работает, когда я загружаю изображение http://localhost:8003/media/content/images/QWzcJDiseGbEAvyEa4aRZU.jpg
Итак, как сделать это правильно для локального и производственного процесса? Должен ли я исправить это в node.js сервисе или django сервисе ? Любая помощь будет признательна.
Вот мой код:
models.py
class AirlinesLocation(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=100, null=True, blank=True)
tnc = ArrayField(models.CharField(max_length=100, null=True, blank=True))
file_requirement = ArrayField(models.CharField(max_length=100, null=True, blank=True))
class AirlinesLocationContent(FileAttributeLocatorMixin, models.Model):
title = models.CharField(max_length=150, blank=True, null=True)
image_raw = ImageField(upload_to='content/images', blank=True, null=True)
is_featured = models.BooleanField(default=False)
location = models.ForeignKey(AirlinesLocation, related_name='contents', on_delete=models.CASCADE, null=True)
views.py
class AirlinesLocationListCreate(generics.ListCreateAPIView):
queryset = AirlinesLocation.objects.all()
serializer_class = AirlinesLocationSerializer
serializer.py
class AirlinesLocationContentSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=False)
class Meta:
model = AirlinesLocationContent
fields = '__all__'
class AirlinesLocationSerializer(serializers.ModelSerializer):
contents = AirlinesLocationContentSerializer(many=True, read_only=True)
class Meta:
model = AirlinesLocation
fields = ['id', 'name', 'description', 'tnc', 'contents']
node.js docker -compose.yml
version: "3"
networks:
default:
external:
name: api-gateway-microservice
services:
rest-edge-gateway:
build:
context: .
dockerfile: ./compose/local/Dockerfile
image: rest-edge-gateway
container_name: rest-edge-gateway
ports:
- 3003:${APP_SERVER_PORT}
env_file: ./.env
external_links:
- generic_django-service_app_1:inventory
volumes:
- ./:/app:rw
- node_modules:/app/node_modules
command: [ "npm", "start" ]
volumes:
node_modules:
django docker -compose.yml
version: '3'
networks:
default:
external:
name: api-gateway-microservice
services:
app:
build:
context: .
dockerfile: ./deployment/app/Dockerfile
image: generic-django_app
env_file:
- ./.env
volumes:
- ./src:/app
ports:
- '8003:8003'
- '8004:8004'
command: ['python3', 'manage.py', 'runserver', '0:8003']
depends_on:
- db
links:
- db
networks:
- default
db:
build: ./deployment/db
image: generic-django_db
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
ports:
- '5437:5432'
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data: