Далее js + Docker -Compose: как разрешить имя хоста контейнера на стороне клиента? - PullRequest
0 голосов
/ 30 мая 2020

Новое в Docker здесь. У меня возникла непонятная проблема с моим приложением Next js, которое работает в собственном контейнере вместе с контейнерами API и баз данных.

Приложение My Next js потребляет данные из контейнера API. Это отлично работает на стороне сервера: приложение Next js разрешает имя хоста контейнера должным образом. Однако на стороне клиента приложение ломается, потому что имя хоста контейнера ничего не значит для браузера (я так думаю?). Я не понимаю, как мне с этим справиться. Идеи?

Вот мой Docker файл Compose, в случае, если он помогает прояснить мой вопрос. Обратите внимание, что я передаю имя хоста приложению Next js через поле environment:

version: '3.8'

services:
    # Redis 
    redis:
        image: redis
        command: redis-server --requirepass ${REDIS_PASSWORD} --bind redis
        ports:
            - "6379:6379"
        networks:
            - mywebappio
    # Data Processing Service
    mywebapp-api:
        container_name: mywebapp-api
        restart: always
        build: 
            context: packages/dps-api
            dockerfile: Dockerfile
        command: npm run dev # npm start prod
        working_dir: /usr/src/dps-api
        env_file: 
            - .env
        volumes: 
            - ./packages/dps-api:/usr/src/dps-api
        ports:
            - "5000:5000"
        networks:
            - mywebappio
        depends_on:
            - redis
    # SSR 'client' app
    nextjs:
        container_name: mywebapp-client
        build:
            context: packages/next-server
            dockerfile: Dockerfile
        command: /bin/bash -c "./wait-for-it.sh mywebapp-api:5000 -- npm run build && npm run start"
        environment: 
            - NEXT_PUBLIC_API_BASE=mywebapp-api:5000
        volumes:
            - ./packages/next-server:/usr/src/app
        ports:
            - "3000:3000"
        networks:
            - mywebappio
        depends_on:
            - mywebapp-api
            - redis
networks:
    mywebappio:
        driver: bridge

Дополнительная информация:

  • Использование curl на моем API, как "localhost: 5000", работает.

  • В консоли разработчика приложение Next js обращается к «localhost: 3000 /» для получения данных на стороне сервера. Это имеет смысл, учитывая, как работает Next js.

  • В консоли разработчика приложение Next js вызывает «mywebapp-api: 5000 /» для получения данных на стороне клиента. Очевидно, это не работает.

...