telnet:无法连接到远程主机:尝试连接正在运行的 docker 映像时连接被拒绝

问题描述 投票:0回答:3

我正在服务器上运行 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     
docker ubuntu-18.04
3个回答
1
投票

根据你的问题,你知道:

  • Docker 容器正在运行
  • Docker 容器正在监听端口 9095
  • 从 Linux 服务器到 docker 容器的 telnet 正在工作
  • 从互联网上其他客户端到 docker 容器的 telnet 无法正常工作

我猜您的 Ubuntu 服务器未在端口 9095 上接受来自互联网的传入请求。 原因可能有很多:

  • 您的服务器有防火墙设置,会阻止连接
  • 您的服务器未将端口 9095 发布到互联网
  • 当使用端口 9095 时,您的客户端无法访问互联网

所以我会调查这些方面。
docker 部分似乎没问题,因为 telnet 到 localhost 正在工作。


1
投票

致那些到达那里但没有找到解决方案的人:

确保您的 Web 服务器正在侦听 0.0.0.0 以侦听所有接口,包括到外部网络的 docker 桥


0
投票

我对此没有任何功劳,但这对我有帮助:

问题是,如果服务在容器外运行,则当您将服务容器化时,期望连接到“localhost”的服务会中断。您必须向服务传递主机的 IP 地址,以便容器化服务能够连接到它。容器内的 localhost 不会离开容器。

参见: https://forums.docker.com/t/connection-refused-when-you-try-to-connect-to-a-service-port-started-on-host/11508/9

© www.soinside.com 2019 - 2024. All rights reserved.