как получить django - миниатюру URL-адреса изображения из другого контейнера docker - PullRequest
0 голосов
/ 12 февраля 2020

Я звонил своему местоположению-контенту 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:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...