16
A
回答
9
您可以使用nsenter進入您的容器空間併發送信號。
PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid kill -SIGINT <PID of your program inside your container>
更多信息:http://jpetazzo.github.io/2014/06/23/docker-ssh-considered-evil/
41
您可以使用docker kill --signal="<signal>" <container name or id>
任何信號發送到指定容器的根進程。
+0
是的,但我想要發送信號的程序是在容器中運行的程序,但不一定是根進程。例如在Docker中運行bash,然後在docker中的bash中運行其他命令。感謝您的回答。 – atupal 2014-09-06 08:14:50
3
docker kill
用於發送信號到主容器處理過程即與PID 1.- 任何應用程序與PID 1可直接處理信號。下面的命令殺掉主要泊塢窗過程:
$ docker kill --signal="SIGTERM" container-id/name
- 但應用程序,它不具有PID 1即應用程序是後臺進程:
- 我們不能發送單直接泊塢窗容器中運行任何後臺進程。
- 在這種情況下,我們需要在作爲入口點運行的shell腳本中捕獲和處理用戶定義的信號。
- 讓我們有以下
Dockerfile
。 (更新它根據應用)
FROM centos:6.7
# Install/Deploye the service below.
# Copy the shell script.
COPY entrypoint.sh /home
EXPOSE 8080
ENTRYPOINT ["/home/entrypoint.sh"]
以下爲
entrypoint.sh
。 (根據應用程序更新它)。假設我們想重新啓動一個init.d
服務。#start the service /etc/init.d/<servicename> start pid="$!" # SIGUSR1- Single handler my_handler() { /etc/init.d/<servicename> restart } # Trap and handle the user defind singnal. trap 'my_handler' SIGUSR1 # wait forever(Alive container.) while true do tail -f /dev/null & wait ${!} done
- 構建docker鏡像並運行容器。
- 現在你可以重新從主機服務:
$docker kill --signal="SIGUSR1" container-id/name
0
我設法在泊塢窗容器由信號我想發送到進程(程序):
- 獲取的的ID集裝箱 - docker ps | grep的yourProgramName - 使用泊塢窗EXEC -IT 4b6425cf4261慶典
- 列出所有正在運行與PS -A過程
- 找到PID 4b6425cf4261
- 登錄到容器中 - 對我來說,它看起來像這樣過程中要發送一個SIGINT到
- 將信號發送到它:殺-SIGINT PID(例如:殺-SIGINT 15)
相關問題
- 1. 在碼頭集裝箱中運行emacs
- 2. 在碼頭集裝箱中運行沙箱與沙箱
- 3. 如何在碼頭集裝箱中運行.NET單元測試
- 4. 碼頭集裝箱運行異步
- 5. 如何從碼頭集裝箱到碼頭機器進行通信?
- 6. 在碼頭集裝箱內運行碼頭?
- 7. 碼頭集裝箱之間的通信
- 8. kubelet - 碼頭集裝箱通信如何發生?
- 9. 如何在碼頭集裝箱內運行gerrit cookbook?
- 10. 如何在碼頭集裝箱運行啓蒙路線?
- 11. 如何在碼頭集裝箱內使用gulp運行livereload?
- 12. 如何在碼頭集裝箱上運行vi?
- 13. 如何將碼頭日誌收集到特定碼頭集裝箱中?
- 14. 如何將兩個正在運行的碼頭集裝箱連接在一起?
- 15. 發送sigstop和sigcont到碼頭集裝箱
- 16. 從碼頭集裝箱發送日誌到FluentD
- 17. 發送請求從一個碼頭集裝箱到另一個
- 18. 從碼頭集裝箱運行碼頭命令
- 19. 連接opscenter和datastax代理程序在兩個碼頭集裝箱中運行
- 20. XDummy在碼頭集裝箱
- 21. systemd在碼頭集裝箱
- 22. DISPLAY:0如果在每個碼頭集裝箱內運行Xvfb:0,則由多個碼頭集裝箱共享?
- 23. 在碼頭集裝箱中安裝ssh
- 24. 在碼頭集裝箱中安裝mongodb
- 25. 如何讓用戶運行(但不管理)碼頭集裝箱?
- 26. 如何鏈接一個碼頭集裝箱與另一個碼頭集裝箱
- 27. 如何在運行碼頭集裝箱時運行CMD並打開Bash?
- 28. 在Openshift中運行特權碼頭集裝箱
- 29. 在高山碼頭集裝箱中運行OpenSSH
- 30. 保存已運行的碼頭集裝箱中的工件
您現在可以使用'docker exec'代替nsenter。 https://docs.docker.com/reference/commandline/exec/ – Andy 2015-07-20 19:07:17