Когда я запускаю docker-compose up
свой проект Docker, он выходит из строя со следующим сообщением:
Error starting userland proxy: listen tcp 0.0.0.0:3000: bind: address already in use
netstat -pna | grep 3000
показывает это:
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN -
Я уже пробовал docker-compose down
, но это не помогает.
sudo netstat -pna | grep 3000
чтобы получить прослушивающий процесс.sudo
чтобы увидеть имя процесса.sudo
можно ли изменить вывод :)Ответы:
В вашем случае это был какой-то другой процесс, который использовал порт и, как указано в комментариях,
sudo netstat -pna | grep 3000
помог вам в решении проблемы.Хотя в других случаях (я сам сталкивался с этим много раз) в основном это тот же контейнер, работающий в каком-то другом экземпляре. В этом случае это
docker ps
было очень полезно, так как часто я оставлял одни и те же контейнеры запущенными в других каталогах, а затем пробовал запускать снова в других местах, где использовались те же имена контейнеров.Как
docker ps
мне помогло:docker rm -f $(docker ps -aq)
это короткая команда, которую я использую для удаления всех контейнеров.Изменить: Добавил, как
docker ps
мне помогло.источник
docker-compose down
помощиdocker-compose up
. Хотя я рекомендую в своем ответе найти контейнер, который уже запущен, и предпринять желаемое действие. Я посчитал целесообразным их удалить, если кто-то не хочет удалять, то вместо этого можноrm
использовать их,stop
чтобы остановить.tensorflow/tensorflow
образ. Как мне настроить мой образ для работы в другом порту. Я пробовал это:docker run -it -d -p 8888:8000 tensorflow/tensorflow
я привязал порт 8888 своего изображения к 8000 на клиенте, но не работает.-d
опцию. Теперь порты отображаются какHOST:CONTAINER
. Таким образом, вы должны бежатьdocker run -it -p 8000:8888
Мне это помогло:
docker-compose down # Stop container on current dir if there is a docker-compose.yml docker rm -fv $(docker ps -aq) # Remove all containers sudo lsof -i -P -n | grep <port number> # List who's using the port
а затем:
kill -9 <process id>
(macOS) илиsudo kill <process id>
(Linux).Источник: комментарий пользователя Rub21 .
источник
docker rm -fv $(docker ps -aq)
эта линия была всем, что мне было нужно. СпасибоУ меня была
docker-compose down --rmi all
такая же проблема (в том же каталоге, где вы запускаете docker-compose up),помогает
источник
down
обычно это последнее, что вы хотите сделать. Потеря текущего состояния - это не кусок сахара.Для Linux / Unix:
Простой поиск утилиты linux с помощью следующей команды
Он покажет, что обработка выполняется на этом порту, а затем завершит этот процесс, используя PID (ищите PID в строке) этого процесса.
источник
У меня такая же проблема. Я исправил это, остановив службу Apache2 на моем хосте.
источник
В моем случае это было
И все, что мне нужно, это отключить прослушивание отладки в php storm
источник
В некоторых случаях важно выполнить более глубокую отладку проблемы перед остановкой контейнера или завершением процесса.
Обратите внимание на следующий контрольный список:
1) Проверьте текущую среду создания докеров
Run
docker-compose ps
.Если порт используется другим контейнером, остановите его
docker-compose stop <service-name-in-compose-file>
или удалите, заменивstop
наrm
.2) Проверьте контейнеры, работающие за пределами вашей текущей рабочей области.
Выполните,
docker ps
чтобы увидеть список всех контейнеров, работающих на вашем хосте.Если вы обнаружите, что порт используется другим контейнером, вы можете остановить его с помощью
docker stop <container-id>
.(*) Поскольку вы не находитесь в области действия исходной
compose
среды - рекомендуется сначала использовать docker inspect для сбора дополнительной информации о контейнере, который вы собираетесь остановить.3) Проверьте, используется ли порт другими процессами, запущенными на хосте.
Например, если порт - 6379, запустите:
(*) Вы также можете использовать команду lsof, которая в основном используется для получения информации о файлах, которые открываются различными процессами (я предлагаю запустить
netstat
перед этим).Так, в случае над выходом
PID
является915
. Теперь можно запустить:И посмотрите идентификатор родительского процесса (
PPID
) и команду выполнения.Вы также можете запустить:
$ pstree -s <PID>
для визуального отображения процесса и связанных с ним процессов.В нашем случае мы видим, что процесс, вероятно, является демоном (PPID равен 1) - в этом случае рассмотрите возможность запуска:
A)
$ cat /proc/<PID>/status
, чтобы получить более подробную информацию о процессе, например, количество потоков, порожденных процессом, его возможности и т. д. ».Б)
$ systemctl status <PID>
чтобы увидетьsystemdблок, вызвавший создание определенного процесса. Если служба не критична - вы можете остановить и отключить службу .4) Restart Docker служба
Run:
sudo service docker restart
.5) Вы достигли этой точки и ..
Только если это не подвергает вашу систему опасности - подумайте о перезапуске сервера.
источник
Сегодня днем я обновил докер и столкнулся с той же проблемой. Я попытался перезапустить докер, но безуспешно.
Наконец, мне пришлось перезагрузить компьютер, и все заработало. Однозначно ошибка.
источник
Проверьте
docker-compose.yml
, может быть, порт указан дважды.источник
Я сталкивался с одной и той же проблемой несколько раз. Перезапуск докера, похоже, помогает
источник
Я решил проблему, перезапустив Docker.
источник
а затем перезагрузите компьютер
источник
Вариант ответа @ DmitrySandalov: у меня был tomcat / java, работающий на 8080, который должен был продолжать работу. Посмотрел файл docker-compose.yml и изменил запись для 8080 на другую по моему выбору.
Работает отлично. (Единственная проблема заключается в том, что изменение будет стерто, если я когда-либо обновлю проект, поскольку оно поступает из внешнего репо.)
источник
Просто примечание, если у вас такая же проблема и с Windows:
В моем случае процесс на моем пути справедлив
grafana-server.exe
. Поскольку я сначала загрузил двоичную версию и дважды щелкнул исполняемый файл, и теперь он запускается как служба пользователем,SYSTEM
что я не могуtaskkill
(без разрешения)Мне нужно зайти в «Диспетчер служб» Windows и найти службу «Графана» и остановить ее. После этого порт 3000 больше не будет занят.
Надеюсь, это поможет.
источник
Тот, который использовал порт 8888, был Jupiter, и мне пришлось изменить файл конфигурации ноутбука Jupiter для работы на другом порту.
чтобы перечислить, кто использует этот конкретный порт. sudo lsof -i -P -n | grep 9
Вы можете указать порт, который должен запускать Jupyter, раскомментировав / отредактировав следующую строку в ~ / .jupyter / jupyter_notebook_config.py:
c.NotebookApp.port = 9999
Если у вас нет jupyter_notebook_config.py, попробуйте запустить jupyter notebook --generate-config. См. Здесь для получения дополнительных сведений о конфигурации Jupyter.
источник
Смена network_mode: "мост" на "хост" сделала это за меня.
Это с
источник
До того, как он запускался на: docker run -d --name oracle -p 1521: 1521 -p 5500: 5500 qa / oracle, я просто изменил порт на docker run -d --name oracle -p 1522: 1522 -p 5500: 5500 qa / Oracle
у меня все сработало!
источник
На моей машине PID не отображался этой командой
netstat -tulpn
для используемого порта (8080), поэтому я не мог его убить, уничтожение контейнеров и перезагрузка компьютера не работали. Итак,service docker restart
команда перезапустила докер для меня (ubuntu), и порт больше не использовался, и я счастливый парень и пошел на обед.источник
Когда я пытался запустить новый conatier-listen tcp 0.0.0.0:8080: bind: адрес, который уже используется, я получал указанную ниже ошибку.
Решение: netstat -tulnp | grep 8080
[root@ip-112-x6x-2x-xxx.xxxxx.compute.internal (aws_main) ~] # netstat -tulnp | grep 8080 tcp 0 0 0.0.0.0:8080 0.0.0.0:* СЛУШАТЬ 12749 / java [root@ip-112-x6x-2x-xxx.xxxxx.compute.internal (aws_main) ~] #
убить -9 12749
Затем попробуйте перезапустить контейнер, он должен работать
источник
Делает трюк.
источник