В некоторых случаях важно выполнить более глубокую отладку проблемы перед остановкой контейнера или завершением процесса.
Обратите внимание на следующий контрольный список:
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, запустите:
$ sudo netstat -ltnp | grep ':6379'
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 915/redis-server 12
tcp6 0 0 ::1:6379 :::* LISTEN 915/redis-server 12
(*) Вы также можете использовать команду lsof, которая в основном используется для получения информации о файлах, которые открываются различными процессами (я предлагаю запустить netstat
перед этим).
Так, в случае над выходом PID
является 915
. Теперь можно запустить:
$ ps j 915
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1 915 915 915 ? -1 Ssl 123 0:11 /usr/bin/redis-server 127.0.0.1:6379
И посмотрите идентификатор родительского процесса ( PPID
) и команду выполнения.
Вы также можете запустить: $ pstree -s <PID>
для визуального отображения процесса и связанных с ним процессов.
В нашем случае мы видим, что процесс, вероятно, является демоном (PPID равен 1) - в этом случае рассмотрите возможность запуска:
A) $ cat /proc/<PID>/status
, чтобы получить более подробную информацию о процессе, например, количество потоков, порожденных процессом, его возможности и т. д. ».
Б) $ systemctl status <PID>
чтобы увидетьsystemdблок, вызвавший создание определенного процесса. Если служба не критична - вы можете остановить и отключить службу .
4) Restart Docker служба
Run: sudo service docker restart
.
5) Вы достигли этой точки и ..
Только если это не подвергает вашу систему опасности - подумайте о перезапуске сервера.
sudo netstat -pna | grep 3000
чтобы получить прослушивающий процесс.