我有一个正在运行的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容器时,容器做出了响应:$ 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
但是我无法从我的主机(Windows)连接到Docker容器。我在Ubuntu 12.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
我为什么无法从Windows连接到正在运行的Docker容器?
ping 172.17.0.2
时,我得到了预期的响应。但我仍然无法连接它… 我编辑了我的问题。 - Thomas Uhrigsudo netstat -tpla
的输出完全相同),但它以某种方式工作。我可以从我的Linux VM以及我的Windows主机访问容器。但我仍然不知道我的问题的真正来源...无论如何,感谢您的帮助!现在它可以工作 :) - Thomas Uhrig