2017-01-07 2 views
5

Я использую Docker для запуска Oracle 11g Express, на MacOS Sierra 10.12.2не удался: порт уже выделен

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. 
➜ ~ 

I диагностика:

➜ ~ 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 

My Dianostic ID: 20EB9506-CC72-4093-8A15-60E05A841ED1

Я не знаю почему. До этого несколько недель он добивается успеха. Почти, я меняю, выпускаю новый IP-адрес DHCP. Как запустить экземпляр Docker с успехом Oracle 11g?

+2

У вас нет другого экземпляра этого контейнера, который уже запущен и использует этот порт TCP? Посмотрите на 'docker ps' и убедитесь, что он еще не существует, и остановите его, если он есть (перед началом другого). Только один процесс может связываться с портом TCP за раз. –

ответ

5

вы не можете запустить дважды

docker run -d -p 49160:22

как это означает, что вы хотите выделить 49160 порт на хосте дважды, конечно, второй раз, вы получите вы сообщению об ошибке, попробуйте для второй прогон

docker run -d -p 49161:22

0

Вам нужно будет использовать другой порт вместо 49161. Попробуйте порт менее 49152.

У вас есть уже существующее соединение между портом 49161 на вашем компьютере и портом 5223 на удаленном сервере Apple. Поэтому этот порт нельзя использовать ни для чего другого, пока это соединение не прекратит свое существование. Порт 5223 используется для push-уведомлений Apple. Насколько я могу судить, на этот раз вашему компьютеру случайно понадобился случайный порт 49161 для подключения к серверу Apple. Раньше, когда этот контейнер Docker работал, я бы поспорил, что порт 49161 на вашем компьютере не использовался.

Всякий раз, когда вы подключаетесь к удаленному серверу, ваш собственный компьютер выделяет случайный номер порта для этого соединения. На этот раз ваш компьютер выделил 49161, когда он подключился к службе push-уведомлений Apple. В следующий раз это может быть совершенно другое число. См. https://en.wikipedia.org/wiki/Ephemeral_port

Смежные вопросы