У деяких випадках критично важливо провести більш глибоку налагодження проблеми перед тим, як зупинити контейнер або вбити процес.
Розгляньте наступний контрольний список нижче:
1) Перевірте поточне середовище складання докера
Виконати docker-compose ps
.
Якщо порт використовується іншим контейнером, зупиніть його docker-compose stop <service-name-in-compose-file>
або видаліть, замінивши stop
на rm
.
2) Перевірте контейнери , що працюють за межами вашого поточного робочого простору
Run , 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>
для того, щоб побачитисистемнийодиниця, яка спричинила створення конкретного процесу. Якщо послуга не є критичною - її можна зупинити та вимкнути .
4) Перезапустіть службу Docker
Run:sudo service docker restart
.
5) Ви досягли цієї точки і ..
Тільки якщо це не загрожує вашій системі - спробуйте перезапустити сервер.
sudo netstat -pna | grep 3000
щоб отримати процес, який прослуховується.