Контейнер Docker не связывается с другими в одной сети docker (мост) - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь настроить среду для веб-сервера на веб-сервере Amazon. Я хочу использовать django, реагировать, nginx, и они выполняются на каждом docker контейнере.

Ниже приведена команда для запуска docker контейнера.

sudo docker run --name django-server
  -it -d -p "8000:8000"
  --volume=$(pwd)/trello-copy-django-src:/backend/trello-copy
  django-server

sudo docker run --name nginx-server
  -d -p "80:80"
  --volumes-from react-server
  nginx-server

Я не указал пользовательский сетевой мост docker и проверил, что они находятся на том же мосту по умолчанию, набрав $ docker inspect bridge.

[{
  "Name": "bridge",
  ...,
  "Containers": {
    "...": { "Name": "django-server", ... },
    "...": { "Name": "react-server", ... },
    "...": { "Name": "nginx-server", ... },
  }
}]

Итак, я ожидал, что код реакции ниже работает. Но он работал только на моем ноутбуке, который имеет точно такую ​​же docker структуру aws.

...
const res = await fetch('http://127.0.0.1:8000/api/');
...

Failed to load resource: net::ERR_CONNECTION_REFUSED 127.0.0.1:8000/api/:1

Что я делаю не так?


Это коды в моем settings.py файле django.

CORS_ORIGIN_ALLOW_ALL=True # only for dev
CORS_ALLOW_CREDENTIALS=True # only for dev
CORS_ORIGIN_WHITELIST = (
    'http://localhost',
    'http://localhost:3000',
)

Сообщение CORS было App.js:10 Fetch API cannot load django-server:8000/api/. URL scheme must be "http" or "https" for CORS request..

Я думаю, что это другая проблема, и тогда django и CORS на самом деле не проблема ... я прав?


Я обнаружил, что localhost в ajax await fetch('http://127.0.0.1:8000/api/'); означает действительно клиентскую сторону (браузер).

Должен ли я использовать общедоступный c IP сервера?

1 Ответ

0 голосов
/ 25 марта 2020

Вы не можете позвонить по 127.0.0.1. Вместо этого вам нужно использовать имя работающего контейнера. Как это:

const res = await fetch('django-server:8000/api/');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...