失败:端口已被占用。

12
我在macOS Sierra 10.12.2上使用Docker来运行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

我的诊断ID:20EB9506-CC72-4093-8A15-60E05A841ED1

我不知道为什么。在那几周之前,它运行成功了。近来,我更改了DHCP IP并发布了新的IP。如何成功运行Docker实例具有Oracle 11g Express?


2
你确定没有另一个实例的容器正在运行并占用这个TCP端口吗?查看 docker ps 并确保它不存在,如果存在则停止它(在启动另一个之前)。一次只能有一个进程绑定到一个TCP端口。 - Dan Lowe
2个回答

11

您不能两次启动

docker run -d -p 49160:22

这意味着您想要在主机上分配两次49160端口,当然,在第二次运行时,您会收到错误消息,请尝试第二次运行

docker run -d -p 49161:22


对我来说,问题是MySQL在计算机启动时自动启动,因此在我不知情的情况下在后台运行。有同样问题的其他人也应该检查他们的系统偏好设置(Mac上),点击MySQL选项卡并禁用“启动电脑时启动MySQL”选项。 - samurai_jane

0

你需要使用一个不同于49161的端口。尝试使用小于49152的端口。

你的电脑在49161端口和远程苹果服务器上的5223端口之间有一个预先存在的连接。因此,该端口在该连接终止之前不能用于其他任何事情。5223端口用于苹果的推送通知。据我所知,这次你的电脑恰好使用了随机端口49161连接到苹果的服务器。以前当Docker容器工作时,我敢打赌你的电脑上的49161端口那时没有被使用。

每当你连接到远程服务器时,你自己的电脑会为该连接分配一个随机端口号。这一次,当你的电脑连接到苹果的推送通知服务时,它分配了49161。下一次,它可能是完全不同的数字。参见https://en.wikipedia.org/wiki/Ephemeral_port


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接