首页 > 解决方案 > 无法从远程机器访问 Docker 容器

问题描述

我使用dockeranddocker-compose来部署和运行在端口 5555 上运行的 java 应用程序。

我运行它 docker-compose -f docker-compose.yml up -d

但是,如果我在运行 docker 容器的服务器之外运行 telnet 命令,我会收到Connection refused消息。如果在服务器内运行它一切都很好。

所以检查了这些东西:

$: 码头工人撰写 ps

在此处输入图像描述

$: ufw 状态

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
5555/tcp                   ALLOW       Anywhere
5432                       ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
5555/tcp (v6)              ALLOW       Anywhere (v6)
5432 (v6)                  ALLOW       Anywhere (v6)

码头工人-compose.yml

version: '3'
services:
  db:
    container_name: db
    image: postgres
    restart: always
    ports:
      - 5432:5432

  auth:
    container_name: auth
    image: registryimg
    restart: always
    stdin_open: true
    tty: true
    ports:
      - 5555:5555

Dockerfile

FROM openjdk:8-jre
ADD target/auth.jar app.jar
EXPOSE 5555
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]

更新 1

从我的容器的 docker 日志中,我发现应用程序正确绑定到所需的端口:

2019-01-18 10:18:11.481 DEBUG 1 --- [ntLoopGroup-2-1] io.netty.handler.logging.LoggingHandler  : [id: 0xaf27337e] REGISTERED
2019-01-18 10:18:11.485 DEBUG 1 --- [ntLoopGroup-2-1] io.netty.handler.logging.LoggingHandler  : [id: 0xaf27337e] BIND: localhost/127.0.0.1:5555
2019-01-18 10:18:11.489 DEBUG 1 --- [ntLoopGroup-2-1] io.netty.handler.logging.LoggingHandler  : [id: 0xaf27337e, L:/127.0.0.1:5555] ACTIVE

更新 2

在我的家用计算机上运行 telnet 命令telnet myhost 5555,但出现错误:

Trying myhost...
telnet: Unable to connect to remote host: Connection refused

完成后,我查看我的容器日志,它们是空的(netty 没有注册任何连接)。

否则我想指出,如果我 telnet 另一个容器,里面有 potgresql - 一切都很好。

标签: dockerdocker-composeconnection-refused

解决方案


好吧,答案是想想你绑定的是什么主机

在我的情况下,netty 服务器绑定如下:

BIND: localhost/127.0.0.1:5555

我已将其更改为:

BIND: 0.0.0.0/0.0.0.0:5555

它就像一个魅力!


推荐阅读