我正在服务器上运行 ubuntu 18.04。我有一个在 docker 上运行的 JasperServer 映像。我正在尝试从我的系统访问它。但它会引发以下错误:
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
如果我在本地主机上远程登录,它会连接,然后连接关闭,这意味着它运行良好。 这是我从本地主机远程登录时的输出:
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
我可以从本地计算机远程登录其他端口,但此端口有问题。有任何想法吗?谢谢
根据答案中的第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
根据你的问题,你知道:
我猜您的 Ubuntu 服务器未在端口 9095 上接受来自互联网的传入请求。 原因可能有很多:
所以我会调查这些方面。
docker 部分似乎没问题,因为 telnet 到 localhost 正在工作。
致那些到达那里但没有找到解决方案的人:
确保您的 Web 服务器正在侦听 0.0.0.0 以侦听所有接口,包括到外部网络的 docker 桥
我对此没有任何功劳,但这对我有帮助:
问题是,如果服务在容器外运行,则当您将服务容器化时,期望连接到“localhost”的服务会中断。您必须向服务传递主机的 IP 地址,以便容器化服务能够连接到它。容器内的 localhost 不会离开容器。