Отказано в соединении между 2 Docker контейнерами, запущенными на AWS EC2 Ubuntu instance - PullRequest
0 голосов
/ 26 марта 2020

Я клонировал свой проект из GitHub в мой AWS экземпляр Ubuntu EC2 и пытаюсь развернуть / разместить его с использованием Docker контейнеров. Интерфейс моего приложения - это Angular проект, который я встроил в папку dist, и я намерен использовать Nginx, чтобы иметь возможность его просматривать.

Бэкэнд моего приложения - это сервер Node, работающий с Express. Кажется, проблема в моей конфигурации Docker.

Когда я запускаю docker - составить --build -d , я захожу на свой IP-адрес ec2 и приложение есть, и я могу взаимодействовать с ним, но когда я пытаюсь загрузить ресурс из серверной части узла, я получаю отказ в соединении с ответом об ошибке Http в браузере, как показано ниже.

enter image description here

Ниже приведены мои docker файлы конфигурации:

docker -compose.yml

version: '3'
services:
  web:
    build: ./Crypto-Trader
    ports:
      - "80:80"
    depends_on:
      - node
    networks:
      - local

  node:
    build: ./Server/Node
    ports:
      - "3000:3000"
    networks:
      - local

networks:
  local:
    driver: bridge

Файл Docker для конфигурации Frontend

FROM nginx

COPY ./dist/Crypto-Trader /usr/share/nginx/html

EXPOSE 80

Dockerfile для Node Backend

FROM node

WORKDIR /src

COPY . /src

RUN npm install

EXPOSE 3000

CMD ["npm", "start"]

Я должен также упомянуть в моем проекте Angular У меня есть переменная окружения для строки подключения URL, настроенная так:

export const environment = {
  production: true,
  dockerIP: 'node'
};

So in my Angular services the connection string to the backend would look something like:

http://${dockerIP}:3000/someresource

Я попробовал несколько разных способов подключения к бэкенду, изменив dockerIP на:

0.0.0.0 или localhost , и ни один из них не сработал, поэтому Я не знаю, что делать сейчас.

В моем экземпляре ec2 я запустил разделитель контейнера Node y и смог получить доступ к данным, выполнив команду curl в командной строке:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://0.0.0.0:3000/profiles/products-list

, но всякий раз, когда я запускаю два контейнера вместе, между ними возникает ошибка связи.

Поэтому я надеюсь, что предоставил достаточно информации, чтобы кто-нибудь мне помог, я не уверен, что еще я могу попробовать для связи двух контейнеров. Заранее спасибо всем, кто отвечает с ответом.

1 Ответ

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

Если вы подключаетесь с локального компьютера, убедитесь, что:

  • Вы не используете Docker сетевое DNS-имя (node:3000), но публикуете экземпляр EC2 c IP
  • Группа безопасности для вашего экземпляра должна разрешать входящий трафик c через порт 3000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...