#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?