我有一个正在运行的Docker容器(来自这映像)。据我所知,容器似乎运行正常(日志文件看起来很好,可以通过SSH连接到容器,并在其中使用SQLPlus )。但是,我无法从主机连接到容器。
我像这样启动了容器:
sudo docker run -d -p 49160:22 -p 49161:1521 -p 49162:8080 alexeiled/docker-oracle-xe-11g我通过以下方式检查了端口绑定:
$ sudo docker port <container> 8080
0.0.0.0:49162当我做一个sudo docker inspect <container>时,我会得到以下内容:
"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"
}
]
}
},当我试图打开容器时,容器响应如下:
$ 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的结果
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知道为什么我不能从连接到我的(正在运行的)码头容器吗?
发布于 2014-03-21 12:02:00
更新:
您的配置在我看来是可以的,但我认为端口49160-49162应该绑定到IPv4接口,而不是IPv6。我在googled上搜索了这个,似乎您在docker中遇到了一个打开的bug:
我看到了两种解决你问题的方法:
172.17.42.1:49162:8080编辑前回答:
你不能打通港口。Ping正在使用ICMP协议。
如果无法连接到已发布的端口,则可以检查停靠容器中的特定服务是否绑定到正确的网络接口(f.e )。0.0.0.0),而不是localhost。您可以检查容器中的所有侦听端口:netstat -tpla。
发布于 2015-05-13 22:19:43
当您在windows中运行docker时,构造如下
Windows machine [
Docker Virtual Box VM [
Container1,
Container2,
...
]
]因此,当您公开容器中的端口并将其绑定到主机中的所有地址(例如使用-p参数)时,端口实际上是在docker虚拟框VM中公开的,而不是在windows机器上。
比如说你跑了
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来发挥破坏作用。
https://stackoverflow.com/questions/22554446
复制相似问题