当前位置: 首页 > 面试题库 >

Docker在容器中侦听但不在外部应答,为什么?

邢承弼
2023-03-14
问题内容

我有一个使用“ EXPOSE 8000”构建的泊坞窗容器。我开始这样的过程:

sudo docker run -t -i -P imagename

容器中的进程正在侦听8000。

# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:8000          *:*                     LISTEN     
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
#

在主机上(即容器外部),我看到端口49164绑定到容器端口8000:

[S-22]jeff@siegfried:~ $ sudo docker ps 
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS                     NAMES
0b0e333c6ec9        lkz:latest                 "/bin/bash"         About an hour ago   Up 6 minutes        0.0.0.0:49164->8000/tcp   lkxyz__2015-01-18_202737   
[S-22]jeff@siegfried:~ $

Inded,docker inspect说(除其他事项外)

"NetworkSettings": {
    "Bridge": "docker0",
    "Gateway": "172.17.42.1",
    "IPAddress": "172.17.0.16",
    "IPPrefixLen": 16,
    "PortMapping": null,
    "Ports": {
        "8000/tcp": [
            {
                "HostIp": "0.0.0.0",
                "HostPort": "49164"
            }
        ]
    }
},

但是,我无法与容器交谈。外,

[S-22]jeff@siegfried:~ $ telnet localhost 49164
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
1,[S-22] jeff@siegfried:~ $

在里面

# telnet localhost 8000
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /

[18/Jan/2015 23:00:59] "GET /" 200 4066
<!DOCTYPE html>
<html>
<head>
...

我希望外部的telnet到49164像在内部一样返回html。

有什么建议么?


问题答案:

您可能希望在容器中运行正在运行的服务,0.0.0.0而不是监听127.0.0.1



 类似资料:
  • 我有两个屏幕..首先是闪屏,在这里我借助firebase.auth()检查用户是否已经存在。onAuthStateChanged侦听器。如果用户为空,它将转到另一个firebase.auth()的登录屏幕。onAuthStateChanged侦听器用于在电话验证后获取用户,如果用户之前未注册,则将用户移至UserDetails屏幕以获取更多用户信息,或者移至主屏幕..同样的检查也在闪屏上进行,以确

  • 当重新排队到原始队列时,消息可以再次返回到死信队列,并看到x-death报头计数不断增长。 由于某些原因,我们希望处理count>=5的死信消息(例如),并将其他消息重新排入死信队列。 我需要首先对消息进行基本的ack以检查X死亡计数头,然后将其发送到原始队列,如果计数足够大,否则在死信队列中重新排队。 我无法重新排队到死信队列,因为基本的get不在侦听器内部:抛出AmqpRejectAndDon

  • 问题内容: 在SO和google中寻找了这个问题的答案,但找不到任何答案。 我有以下代码: 编译器返回以下内容: 从内部类内部访问局部变量变量;需要宣布为最终 为什么必须最终决定的技术原因是什么? 问题答案: 这是因为您正在使用匿名内部类。发生的是编译器为您创建了类。它将其称为您的外部类,并添加和编号,例如,等等。 该类具有对自动初始化的外部类的引用,因此其实例可以使用外部类的方法和字段。 但是您

  • 我创建了一个Spring Boot应用程序,它通过HTTP POST将一些经过分析的Twitter-stuff作为JSON对象。JSON对象如下所示: 当我从IntelliJ运行代码并将此JSON发布到我的服务时,AnalyzedKeyWordList中填充了关键字对象“VW”和“Tesla”。所以起作用了。 类“AnalyzedKeywordList”如下所示: 导入java.util.List

  • 我已经为oracle 19c创建了一个映像。我已使用以下命令启动容器。 创建容器后,我可以登录容器。我能够在容器内连接以下命令。 sqlplus系统/password1@172.17.0.2:1527/ORCLCDB 在容器外部,通过cmd,我无法连接到该oracle实例。 注意:我已经在windows计算机上的端口1521(默认端口)安装了oracle。 listener.ora 特斯奈姆斯·奥

  • 有人能解释一下这段JavaScript代码的程序流程吗: