Докер. Ошибка: не удается запустить контейнер: порт уже выделен
Я работаю с Docker, и когда я впервые создал контейнер, мне удалось работать с ним должным образом. Сегодня я перезагрузил свой компьютер и снова начал работать с контейнером Docker.
Я попытался "активировать" контейнер следующим образом:
docker run -it --rm -p 5000:5000 -v 'pwd':/app myproject
И это сообщение, которое я возвращаю:
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : [8.8.8.8 8.8.4.4]
2014/07/28 12:34:32 Error: Cannot start container a152dd9040ab4be0f20ace96ba4a9b0a3c50fa89034512c2b9fcb986db912027: port has already been allocated
Поэтому я попытался выяснить, какой процесс прослушивает порт 5000 и убить его. Именно так:
# netstat -tulpn | grep :5000
tcp6 0 0 :::5000 :::* LISTEN 3992/docker.io
# kill -9 3992
Я также попытался перезапустить службу докеров, например:
sudo service docker.io restart
Но ничего из этого не сложилось. Я все еще получаю то же сообщение об ошибке при попытке активировать мой контейнер:
# docker run -it --rm -p 5000:5000 -v 'pwd':/app myproj
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : [8.8.8.8 8.8.4.4]
2014/07/28 12:34:14 Error: Cannot start container b28ac5c4a425068ac1827bade6dd89e95be32f3e94c982300eba006822971ab1: port has already been allocated
Googling для решения, я обнаружил, что это, похоже, известная проблема, но, возможно, вы можете помочь мне найти выход из этой проблемы.
ОБНОВИТЬ:
Так же, как просил @Marcus Hughes, это вывод docker ps
:
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3fdfc9ecf30f 7e0ca0814a33 /bin/sh -c composer 4 hours ago Up About an hour 0.0.0.0:5000->5000/tcp naughty_galileo
И если я делаю docker ps -a
, это то, что я получаю:
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69400a0e21f5 stenocaption-server:latest /bin/sh -c composer About a minute ago Exit 0 agitated_feynman
a3c352d48ab5 stenocaption-server:latest /bin/sh -c composer 6 minutes ago Exit 0 grave_shockley
4c3c823bda55 stenocaption-server:latest /bin/sh -c composer 2 hours ago Exit 0 condescending_heisenberg
b9083a0af2cd 7e0ca0814a33 /bin/sh -c composer 2 hours ago Exit 0 kickass_lumiere
0d51ea8c4377 7e0ca0814a33 /bin/sh -c composer 2 hours ago Exit 0 sick_ritchie
a152dd9040ab 7e0ca0814a33 /bin/sh -c composer 2 hours ago Exit 0 happy_thompson
b28ac5c4a425 7e0ca0814a33 /bin/sh -c composer 2 hours ago Exit 0 cocky_franklin
d449f40487ca 7e0ca0814a33 /bin/sh -c composer 2 hours ago Exit 0 evil_torvalds
b485da98ca6d 7e0ca0814a33 /bin/sh -c composer 2 hours ago Exit 0 tender_nobel6
8b73b154c8aa 7e0ca0814a33 /bin/sh -c composer 2 hours ago Exit 0 dreamy_ptolemy
10d327c46d95 7e0ca0814a33 /bin/sh -c composer 2 hours ago Exit 0 boring_morse
a3397c0c4dfb 7e0ca0814a33 /bin/sh -c composer 2 hours ago Exit 0 thirsty_engelbart
e6440629fac1 7e0ca0814a33 /bin/sh -c composer 3 hours ago Exit 0 distracted_bohr
cb718204384e 7e0ca0814a33 /bin/sh -c composer 3 hours ago Exit 0 nostalgic_mclean
ca62ccc30227 7e0ca0814a33 /bin/sh -c composer 3 hours ago Exit 0 evil_heisenberg
83ed0727883f 7e0ca0814a33 /bin/sh -c composer 3 hours ago Exit 0 nostalgic_curie
1100e926ef29 7e0ca0814a33 /bin/sh -c composer 3 hours ago Exit 0 tender_nobel
1ed76e31d8f5 7e0ca0814a33 /bin/sh -c composer 3 hours ago Exit 0 grave_hawking
ad429a4ab116 7e0ca0814a33 /bin/sh -c composer 3 hours ago Exit 0 condescending_nobel
5790e0e9c21f 7e0ca0814a33 /bin/sh -c composer 4 hours ago Exit 0 boring_curie
3fdfc9ecf30f 7e0ca0814a33 /bin/sh -c composer 4 hours ago Up About an hour 0.0.0.0:5000->5000/tcp naughty_galileo
7372b8327065 b0d5a13e5ea7 /bin/sh -c apt-get-i 40 hours ago Exit 127 high_torvalds
d4482ca96df9 10aac624035d /bin/sh -c apt-get i 40 hours ago Exit 0 sad_pare
0ae7489bd53e 6edd40908159 /bin/sh -c apt-get i 41 hours ago Exit 0 dreamy_davinci
13c1a8670908 ubuntu:14.04 /bin/sh -c apt-get u 41 hours ago Exit 0 loving_babbage
18e20ff7f4ec ubuntu:14.04 /bin/sh -c apt-get u 41 hours ago Exit 1 stupefied_poincare
0965776b2ee9 ubuntu:14.04 /bin/sh -c apt-get u 41 hours ago Exit 1 goofy_davinci
aa3d871f6d1c ubuntu:14.04 /bin/sh -c apt-get u 41 hours ago Exit 1 insane_pasteur
cb266936771d ubuntu:14.04 /bin/sh -c apt-get u 41 hours ago Exit 1 distracted_turing
10d25a9c965b ubuntu:14.04 /bin/sh -c apt-get u 41 hours ago Exit 1 kickass_ptolemy
729afe65b3f5 ubuntu:14.04 /bin/sh -c apt-get u 42 hours ago Exit 1 dreamy_tesla
a53c5707e667 ubuntu:14.04 /bin/sh -c apt-get u 42 hours ago Exit 1 ecstatic_bohr
ec97aaae1bda ubuntu:14.04 /bin/sh -c apt-get u 42 hours ago Exit 1 romantic_bell
13fe8539439c ubuntu:14.04 /bin/sh -c apt-get u 42 hours ago Exit 1 romantic_shockley
deaff10c2ed3 ubuntu:14.04 /bin/sh -c apt-get u 42 hours ago Exit 1 trusting_shockley
c49494c24595 ubuntu:14.04 /bin/sh -c apt-get u 42 hours ago Exit 1 loving_bell
3972c67fbd92 ubuntu:14.04 /bin/sh -c apt-get u 42 hours ago Exit 1 stupefied_euclid
Ответы
Ответ 1
Из вывода docker ps
имеется контейнер, который прослушивает порт 5000
как вы можете видеть из 0.0.0.0:5000->5000/tcp
под столбцом ports
.
Вы можете убить этот контейнер с docker kill container
. В этот момент он освободит порт. В твоем случае:
docker kill 3fdfc9ecf30f
Ответ 2
Я исправил его, перезапустив службу докеров:
sudo service docker restart
Примечание. Кстати, я использую Linux Mint.
Ответ 3
Одна из причин, по которой я столкнулся, заключается в том, что в некоторых версиях docker (pre 1.2) ошибка в том, что если он обнаруживает, что порт уже назначен (возможно, даже для системы, а не для запуска докеров, такой как nginx), она будет продолжать не переназначьте его, даже если вы остановите противоречивую вещь, пока не перезапустите докер.
Убедитесь, что ничего не используется в этом порту, а затем перезапустите докер. (перезагрузка службы docker.io)
ссылка: https://github.com/docker/docker/issues/6476
Ответ 4
Используйте docker stop $(docker ps | grep ":PORT_NUMBER" | awk '{print $1}')
Просто замените номер порта на порт, на котором работает докер-контейнер.
Например: Запуск docker stop $(docker ps | grep ":8082" | awk '{print $1}')
остановит контейнер, работающий на порту 8082
Ответ 5
Для пользователей Windows, цитирование из документации Docker:
В системах Windows CTRL+C
не останавливает контейнер. Итак, сначала CTRL+C
чтобы получить подсказку (или откройте другую оболочку), затем введите docker container ls
чтобы просмотреть список запущенных контейнеров, а затем docker container stop <Container NAME or ID>
чтобы остановить контейнер. В противном случае вы получите сообщение об ошибке от демона при попытке перезапустить контейнер.
Кроме того, эта команда останавливает все запущенные контейнеры:
docker stop $(docker ps -q)