Почему контейнер не может запросить другой?

#docker #docker-compose #docker-networking

#docker #docker-составить #docker-сеть

Вопрос:

Я не могу отправить http-запрос из контейнера другому

Я уже пытаюсь создать сеть, но это не помогло

 version: '2'
services:
 backend:
    container_name: backend
    image: registry.gitlab.com/myproject/backend:latest
    restart: always
    ports:
      - 10083:3000
    networks:
      - dpnet
 widget-ws:
    container_name: widget-ws
    image: registry.gitlab.com/myproject/widget-ws:latest
    restart: always
    ports:
      - 10084:3001
    networks:
      - dpnet
networks:
  dpnet:
    driver: bridge
  

Вместо URL-адреса я использую имя_контейнера
http://widget-ws:10084
но получил ошибку
connect ECONNREFUSED 172.21.0.2:10084

Ответ №1:

Используйте URL: http://widget-ws:3001

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

Нет необходимости создавать сеть.

Ответ №2:

Кажется, вы смешиваете внутренние IP-адреса с портами, которые вы открыли для хоста. Замените http://widget-ws:10084 на http://widget-ws:3001 , и ваши соединения должны работать.

Комментарии:

1. Но могу ли я использовать внешний порт без создания сети?

Ответ №3:

Тип сети, используемой контейнером, будь то мост, оверлей, сеть macvlan или пользовательский сетевой плагин, прозрачен изнутри контейнера. Поэтому используйте порт контейнера вместо использования внешнего привязанного порта.

 http://widget-ws:3001