首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头集装箱绑定到港口,但我不能打开它。

码头集装箱绑定到港口,但我不能打开它。
EN

Stack Overflow用户
提问于 2014-03-21 09:10:29
回答 2查看 51K关注 0票数 24

我有一个正在运行的Docker容器(来自映像)。据我所知,容器似乎运行正常(日志文件看起来很好,可以通过SSH连接到容器,并在其中使用SQLPlus )。但是,我无法从主机连接到容器。

我像这样启动了容器:

代码语言:javascript
复制
sudo docker run -d -p 49160:22 -p 49161:1521 -p 49162:8080 alexeiled/docker-oracle-xe-11g

我通过以下方式检查了端口绑定:

代码语言:javascript
复制
$ sudo docker port <container> 8080
0.0.0.0:49162

当我做一个sudo docker inspect <container>时,我会得到以下内容:

代码语言:javascript
复制
"NetworkSettings": {
    "IPAddress": "172.17.0.2",
    "IPPrefixLen": 16,
    "Gateway": "172.17.42.1",
    "Bridge": "docker0",
    "PortMapping": null,
    "Ports": {
        "1521/tcp": [
            {
                "HostIp": "0.0.0.0",
                "HostPort": "49161"
            }
        ],
        "22/tcp": [
            {
                "HostIp": "0.0.0.0",
                "HostPort": "49160"
            }
        ],
        "8080/tcp": [
            {
                "HostIp": "0.0.0.0",
                "HostPort": "49162"
            }
        ]
    }
},

当我试图打开容器时,容器响应如下:

代码语言:javascript
复制
$ ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_req=1 ttl=64 time=0.138 ms
64 bytes from 172.17.0.2: icmp_req=2 ttl=64 time=0.132 ms

,但我无法从我的主机()连接到Docker容器。我正在Ubuntu12.04虚拟机中运行Docker (在Windows上使用VirtualBox )。我不确定这是否与Docker、我的Linux或VirtualBox有关。我在VirtualBox中转发了一些端口:

这是sudo netstat -tpla的结果

代码语言:javascript
复制
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:sunrpc                *:*                     LISTEN      542/rpcbind
tcp        0      0 *:ssh                   *:*                     LISTEN      1661/sshd
tcp        0      0 *:51201                 *:*                     LISTEN      831/rpc.statd
tcp        0     80 docker:ssh              10.0.2.2:62220          ESTABLISHED 1902/sshd: vagrant
tcp6       0      0 [::]:49160              [::]:*                  LISTEN      2388/docker
tcp6       0      0 [::]:49161              [::]:*                  LISTEN      2388/docker
tcp6       0      0 [::]:56105              [::]:*                  LISTEN      831/rpc.statd
tcp6       0      0 [::]:49162              [::]:*                  LISTEN      2388/docker
tcp6       0      0 [::]:sunrpc             [::]:*                  LISTEN      542/rpcbind
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      1661/sshd

知道为什么我不能从连接到我的(正在运行的)码头容器吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-21 12:02:00

更新:

您的配置在我看来是可以的,但我认为端口49160-49162应该绑定到IPv4接口,而不是IPv6。我在googled上搜索了这个,似乎您在docker中遇到了一个打开的bug:

我看到了两种解决你问题的方法:

  1. 完全禁用Ubuntu上的IPv6
  2. 或将直接绑定到IPv4地址:-p 172.17.42.1:49162:8080

编辑前回答:

你不能打通港口。Ping正在使用ICMP协议。

如果无法连接到已发布的端口,则可以检查停靠容器中的特定服务是否绑定到正确的网络接口(f.e )。0.0.0.0),而不是localhost。您可以检查容器中的所有侦听端口:netstat -tpla

票数 14
EN

Stack Overflow用户

发布于 2015-05-13 22:19:43

当您在windows中运行docker时,构造如下

代码语言:javascript
复制
Windows machine [
  Docker Virtual Box VM [ 
    Container1,
    Container2,
    ...
  ]
]

因此,当您公开容器中的端口并将其绑定到主机中的所有地址(例如使用-p参数)时,端口实际上是在docker虚拟框VM中公开的,而不是在windows机器上。

比如说你跑了

代码语言:javascript
复制
docker run --name MyContainerWithPortExpose -d -p 127.0.0.1:43306:3306  SomeImage:V1

从windows命令提示符中运行netstat命令。奇怪的是,您不会在localhost:43306模式下看到LISTEN端口。

现在,从您的boot2docker ssh控制台执行一个boot2docker,以登录到对接程序虚拟框VM中,运行netstat命令。伏拉..。您将发现localhost:43306列在停靠虚拟框VM上。

工作范围:

在Virtual中,运行一个ipconfig命令并查找VM的IP地址。在run命令中使用这个IP,而不是127.0.0.1,相反,您的DHCP服务器有时可以通过在每次启动boot2docker虚拟盒VM时分配不同的IP来发挥破坏作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22554446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档