2013-12-16 2 views
4

У меня есть приложение на стороне сервера, работающее в контейнере Docker. Один из процессов в нем висел и должен быть убит (приложение затем создаст другой процесс для его замены).Убивание процесса в контейнере загружаемого докера

Есть ли способ убить этот процесс, не останавливая контейнер Docker?

ответ

2

На данный момент это невозможно с Docker, но, по-видимому, запланировано на 0,8, см. Вопрос № 1228 here.

Однако можно использовать LXC присоедините запустить оболочку в существующем контейнере (видно на приведенных выше замечаний эмиссионными) и затем вы можете убить зависший процесс оттуда:

$ lxc-attach -n FULLCONTAINERID /bin/bash 
+1

Спасибо ometra. Кажется, эта проблема связана с запуском другой команды в существующем запущенном контейнере - очень полезной и несколько более общей. На самом деле я решил это решить, найдя висячий процесс на хозяине докера и убив его прямо там, без lxc-attach-ing bash в контейнер. Ваш ответ тоже будет работать. Благодарю. –

1

Вы можете получить FULLCONTAINERID с Docker пс --no-СТВОЛА = истина:

корень @ turmes/дома/zoobab [35] # докер пс --no-Trunc = True КОНТЕЙНЕР ID IMAGE> COMMAND C STATUS ПОРТЫ ИМЕНА 2741d88a51148e66d7b2b44d8c1cc6ed7d 1515f370be5d00bd003d40cf8d575b zoobab/centos57: последний kamailio -P /var/run/kamailio.pid -m 64 -M 4 -u kamailio -g kamailio -D 1 Up 19 minutes angry_fermat
root @ turmes/home/zoobab [36] #

1

вы можете сделать это сейчас в Докер 1.3 с помощью exec command:

docker exec container_name kill process_name 
+0

Я использовал ту же команду, что и вы. Но я не мог убить этот процесс. когда я набираю «имя_докера-контейнера», я все еще вижу этот процесс. Что я могу сделать сейчас? – priya

1

Если работает докер 1.3 или более поздняя версия не вариант, вы можете получить доступ к корневой оболочке внутри Docker Контейнер с использованием nsenter ,

This У блога есть все необходимые инструкции.

Как только вы получаете доступ к корневой оболочке, вы можете, конечно, выполнить любую операцию, которая вам нравится.

0

возможно времена изменились, но по состоянию на docker.latest: docker kill 593690fe0087 убил CONTAINER ID, когда я побежал docker ps. У меня был контейнер в течение 2 недель, и я видел его только сейчас, когда окружающая среда не была.

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