telnet: не удается подключиться к удаленному хосту: отказано в подключении при попытке подключить запущенный образ docker

#docker #ubuntu-18.04

#docker #ubuntu-18.04

Вопрос:

На сервере работает ubuntu 18.04. У меня есть изображение JasperServer, запущенное в docker. Я пытаюсь получить к нему доступ из своей системы. Но он выдает следующую ошибку:

 jamshaid@jamshaid:~$ telnet my_server_address 9095
Trying my_server_ip...

telnet: Unable to connect to remote host: Connection refused
  

Вот вывод для sudo docker ps -a

 CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                           NAMES
69c31ba800ab        bitnami/jasperreports   "/app-entrypoint.sh …"   5 hours ago         Up 5 hours          0.0.0.0:9095->8080/tcp, 0.0.0.0:443->8443/tcp   ceyedev_jasperreports_1
2a7cb72da0c7        bitnami/mariadb:10.3    "/opt/bitnami/script…"   5 hours ago         Up 5 hours          0.0.0.0:3306->3306/tcp                          ceyedev_mariadb_1
  

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

 ceyedev@ub18servertiny:~$ telnet localhost 9095
Trying ::1...
Connected to localhost.localdomain.
Escape character is '^]'.
Connection closed by foreign host.
  

Вот файл docker-compose

 version: '2'
services:
  mariadb:
    restart: always
    image: 'bitnami/mariadb:10.3'
    environment:
      - MARIADB_USER=bn_jasperreports
      - MARIADB_DATABASE=bitnami_jasperreports
      - ALLOW_EMPTY_PASSWORD=yes
    ports:
      - 3306:3306      
    volumes:
      - 'mariadb_data:/bitnami'
  jasperreports:
    restart: always
    image: 'bitnami/jasperreports'
    environment:
      - MARIADB_HOST=mariadb
      - MARIADB_PORT_NUMBER=3306
      - JASPERREPORTS_DATABASE_USER=bn_jasperreports
      - JASPERREPORTS_DATABASE_NAME=bitnami_jasperreports
      - ALLOW_EMPTY_PASSWORD=yes
    ports:
      - '9095:8080'
      - '443:8443'
    volumes:
      - 'jasperreports_data:/bitnami'
    depends_on:
      - mariadb
volumes:
  mariadb_data:
    driver: local
  jasperreports_data:
    driver: local 
  

Вот вывод для sudo docker logs container_id_for_jasper
введите описание образа здесь

Я могу подключить другие порты telnet со своего локального компьютера, но у меня проблема с этим. Есть идеи? Спасибо

следуя пункту 2 из ответов, я выполнил приведенную ниже команду и обнаружил, что 9095 выделено сервером. Какие-нибудь идеи, пожалуйста?

 ceyedev@ub18servertiny:~$ netstat -atn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN     
tcp        0    244 10.0.114.15:22          182.185.223.147:54326   ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:5432                :::*                    LISTEN     
tcp6       0      0 :::443                  :::*                    LISTEN     
tcp6       0      0 :::9095                 :::*                    LISTEN     
tcp6       0      0 :::3306                 :::*                    LISTEN     
  

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

1. Я не понимаю, какая команда telnet не работает. Можете ли вы добавить команду telnet в свой первый фрагмент оболочки (попробуйте my_server_ip …)?

2. @ElmarBrauch только что обновил фрагмент. Пожалуйста, посмотрите

Ответ №1:

Людям, которые попали туда и не нашли решения:

Убедитесь, что ваш веб-сервер прослушивает 0.0.0.0, чтобы прослушивать ВСЕ интерфейсы, включая docker bridge, во внешнюю сеть

Ответ №2:

Исходя из вашего вопроса, вы знаете:

  • Контейнер Docker запущен
  • Контейнер Docker прослушивает порт 9095
  • telnet с сервера Linux на контейнер docker работает
  • telnet от другого клиента где-то в Интернете к контейнеру docker НЕ работает

Я предполагаю, что ваш сервер Ubuntu не принимает входящие запросы из Интернета на порт 9095. Для этого может быть много причин:

  • На вашем сервере установлены настройки брандмауэра, которые блокируют подключение
  • Ваш сервер не опубликовал порт 9095 в Интернет
  • У вашего клиента нет доступа в Интернет при использовании порта 9095

Поэтому я бы изучил эти аспекты.
Часть docker, похоже, в порядке, потому что telnet к localhost работает.

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

1. Спасибо за ответ. что касается вашего первого пункта, если на сервере установлены настройки брандмауэра, он не должен разрешать каждый входящий запрос с моего локального компьютера. Я могу получить доступ к другим портам со своего локального компьютера. Может ли это просто заблокировать трафик на 9095? Что касается третьего пункта, Интернет работает довольно нормально.

2. Я только что обновил вопрос. не могли бы вы взглянуть

3. Можете ли вы описать свой сервер немного подробнее? Это сервер в облаке (AWS, Azure и т. Д.)? Как сервер подключен к Интернету (loadbalancer, DMZ, напрямую, обратный прокси)? Какие другие службы запущены на вашем сервере? У него открыт порт 443 — есть ли веб-сервер Apache или что-то в этом роде? Можете ли вы подключиться к telnet через порт 443?