wget работает, но не может запросить приложение React - PullRequest
0 голосов
/ 27 августа 2018

У меня есть два связанных контейнера Docker api и frontend. frontend - это приложение ReactJS внутри nginx контейнера. Это Dockerfile:

FROM nginx:alpine

COPY ./build /usr/share/nginx/html/

и команда запуска:

docker run --name frontend --link api:api -p 80:80 frontend_img

Когда я sh внутри frontend и запускаю:

$ wget http://api:8080/api/users

работает нормально, и я могу выбрать пользователей. Однако когда мое приложение пытается извлечь данные, в консоли Chrome появляется ошибка ERR_NAME_NOT_RESOLVED.

Это мой код JS:

fetchUsers() {
    return axios.get('http://api:8080/api/users')
      .then(response => response.data)
      .then(users => this.setState({ users }));
}

Что мне не хватает? Нужно ли что-то настраивать в NGINX, чтобы можно было получать данные из api или что-то еще?

1 Ответ

0 голосов
/ 28 августа 2018

Решено! Благодаря этому принятому ответу docker nginx ERR_NAME_NOT_RESOLVED

При подключении к контейнерам с обратным прокси все URL используются приложением необходимо указать на этот обратный прокси, а не на приложение. Обычно вы делаете это, давая путь в URL без имя хоста.

Сначала я создал файл default.conf nginx для добавления оператора location для перенаправления вызовов в мой контейнер API:

location /api/ {
  proxy_pass http://api:8080;
}

Затем в моем веб-приложении я изменяю свой код JS, поэтому запрашиваю у /api/users без имени хоста:

fetchUsers() {
    return axios.get('/api/users')
      .then(response => response.data)
      .then(users => this.setState({ users }));
}

Наконец, в Dockerfile я заменяю файл по умолчанию default.conf nginx на отредактированный:

FROM nginx:alpine
COPY default.conf /etc/nginx/conf.d
COPY ./build /usr/share/nginx/html/

Вот и все!

...