Проверьте соединение между контейнерами Docker в среде, созданной Docker - PullRequest
1 голос
/ 11 октября 2019

Мы используем docker-compose для настройки служб для нашего приложения:

version: "3"
services:
  db:
    container_name: db
    image: postgres:11.1
    environment:
      POSTGRES_USER: xxx
      POSTGRES_PASSWORD: xxx
      POSTGRES_DB: xxx
      PGPASSWORD: xxx
    volumes:
      - pgdata:/var/lib/postgresql/data
      - ./data/dbdump:/dbdump
    networks:
      - zenet
    ports:
      - "5432:5432"

  # The React web application
  web:
    container_name: web
    build:
      context: .
      dockerfile: devenv/web/Dockerfile
    volumes:
      - ./src/client-app:/usr/local/abc
      - /usr/local/abc/node_modules
    networks:
      - zenet
    ports:
      - "3000:3000"
    command: npm run startindocker

  # The Django Rest Framework API
  api:
    container_name: api
    build:
      context: .
      dockerfile: devenv/api/Dockerfile
    environment:
      DJANGO_SETTINGS_MODULE: abc.settings.dev
      PYTHONSTARTUP: /root/pythonstartup.sh
      PYTHONIOENCODING: UTF-8
    volumes:
      - .:/usr/local/borrow-a-boat
      - ./devenv/api/pythonrc.py:/root/pythonstartup.sh
    networks:
      - zenet
    depends_on:
      - "db"
    ports:
      - "9000:9000"
    command:
      python3 /usr/local/borrow-a-boat/src/django/abc/manage.py runserver 0.0.0.0:9000
    tty: true

volumes:
  pgdata:
  customboatdata:

networks:
  zenet:

(конфиденциальная информация была заменена)

У моих коллег все в порядке. Я настраиваю приложение, а тома и контейнеры работают. Я могу нажать службу api на порт 9000 штрафа из браузера и подтвердить, что БД заполнена. Однако мой сервис web не может получить данные из API. Как я могу подтвердить, что вышеупомянутое утверждение верно и что Интернет действительно не может связаться с сервисом API.

И как я могу это исправить и заставить Интернет получать данные от API,Извиняюсь за вопрос новичка.

РЕДАКТИРОВАТЬ:

Когда я запускаю ping api из контейнера web, используя docker exec -it [containerID] /bin/sh, я получаю ответ в виде:

64 bytes from 172.18.0.4: seq=139 ttl=64 time=0.084 ms

Так что, очевидно, мое утверждение неверно. Почему сервис web не может получить ответ от сервиса api. Когда я загружаю приложение web в браузер, я не получаю никакого отображения журнала в терминале API-интерфейса.

EDIT-2:

Согласно вопросу @runwuf & myОтвет, ясно, что «Интернет» может общаться с сервисом «API». Итак, что-то еще не так. Вот шаги, которые мы следуем, чтобы настроить стек в наших системах. Я использую ОС Linux Mint 19.2, в то время как команда использует Mac. Команды:

  • docker kill $ (docker_container_names)
  • docker rm -v $ (docker_container_names)
  • том докера rm abc_pgdata
  • dockerimage rm abc_api
  • docker image rm abc_web
  • сборка docker-compose
  • сборка docker-up up -d db api web
  • ssh abc@abc.com'pg_dump abc |gzip '|ружье |docker-compose run --rm db psql --host db --username abc
  • docker-compose run --rm db psql --host db --username abc -c "update core_photo set image_base = 'пример.jpg '"
  • docker-compose run --rm db psql --host db --username abc -c" update core_experienceimage set image_base =' sample.jpg '"

1 Ответ

0 голосов
/ 12 октября 2019

В конце концов, это был случай, когда переменная env была недоступна в сервисе web. Все, что нужно, это прочитать журналы консоли в браузере, который показывает переменную undefined.

Урок для меня заключается в том, что когда дело доходит до решения проблем, независимо от того, насколько новой является технология, не забывайтеиспользовать инструменты, с которыми вы знакомы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...