失败:端口已分配

我使用Docker在macOS Sierra 10.12.2上运行Oracle 11g Express

https://github.com/wnameless/docker-oracle-xe-11g

这是我的错误:

Last login: Sat Jan 7 22:42:11 on ttys000 ➜ ~ docker run -d -p 49160:22 -p 49161:1521 wnameless/oracle-xe-11g docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'. ➜ ~ docker run -d -p 49160:22 -p 49161:1521 wnameless/oracle-xe-11g 043d8caecbb45d6e2e5999b69a2f760c20d53ff3aa2fad78cb1eb70acb058a1f docker: Error response from daemon: driver failed programming external connectivity on endpoint serene_lalande (08bb0bd9684c0f92db7b736986bf894d3a57a714324405823496d13e175e7491): Error starting userland proxy: Bind for 0.0.0.0:49161 failed: port is already allocated. ➜ ~ 

我诊断:

 ➜ ~ netstat -anp tcp | grep 49161 tcp4 0 0 192.168.1.2.49161 17.188.166.13.5223 ESTABLISHED ➜ ~ ➜ ~ docker --version Docker version 1.12.5, build 7392c3b 

我的电话号码:20EB9506-CC72-4093-8A15-60E05A841ED1

我不知道为什么。 在这几个星期之前,它运行成功。 几乎,我改变,释放新的DHCP IP。 如何运行Docker实例有Oracle 11g express成功?

你不能启动两次

docker run -d -p 49160:22

因为这意味着你想在主机上分配端口49160两次,当然,第二次,你会得到错误信息,尝试第二次运行

docker run -d -p 49161:22

您将需要使用不同的端口,而不是49161.尝试一个小于49152的端口。

您的计算机上的端口49161与远程Apple服务器上的端口5223之间有预先存在的连接。 因此,该端口不能用于其他任何事情,直到连接不再存在为止。 端口5223用于Apple的推送通知。 尽我所知,你的电脑碰巧使用随机端口49161连接到苹果的服务器这次。 以前,当Docker容器工作时,我会打赌您的计算机上的端口49161没有被使用。

无论何时连接到远程服务器,您自己的计算机都会为该连接分配一个随机端口号。 这一次,您的计算机连接到苹果的推送通知服务时分配了49161。 下一次,它可能是一个完全不同的数字。 请参阅https://en.wikipedia.org/wiki/Ephemeral_port