您好,登錄后才能下訂單哦!
這篇文章主要講解了“Docker容器中如何運行多條命令”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Docker容器中如何運行多條命令”吧!
一, 簡介
dockerfile 運行只支持一條命令,當在docker里要運行多條命令,用supervisor來管理就比較合適了。
supervisor是一個 python 開發的 client/server 系統,可以管理和監控類 unix 操作系統上面的進程。它可以同時啟動,關閉多個進程,使用起來特別的方便。
組成部分
supervisor 主要由兩部分組成:
supervisord(server 部分):主要負責管理子進程,響應客戶端命令以及日志的輸出等;
supervisorctl(client 部分):命令行客戶端,用戶可以通過它與不同的 supervisord 進程聯系,獲取子進程的狀態等。
二,存在的問題——日志不輸出
但是使用supervisor,django運行的日志就不會在docker里輸出了,默認的輸出如下:
2018-03-28 06:48:20,292 crit supervisor running as root (no user in config file)
2018-03-28 06:48:20,308 info supervisord started with pid 1
2018-03-28 06:48:21,310 info spawned: 'celery_beat' with pid 7
2018-03-28 06:48:21,312 info spawned: 'celery_worker' with pid 8
2018-03-28 06:48:21,313 info spawned: 'django' with pid 9
2018-03-28 06:48:22,315 info success: celery_beat entered running state, process has stayed up for > than 1 seconds (startsecs)
2018-03-28 06:48:22,315 info success: celery_worker entered running state, process has stayed up for > than 1 seconds (startsecs)
2018-03-28 06:48:22,315 info success: django entered running state, process has stayed up for > than 1 seconds (startsecs)
上面的docker中supervisor配置如下:
[supervisord] nodaemon=true [program:django] command=python manage.py runserver 0.0.0.0:8080 [program:celery_worker] command=python manage.py celery worker -c 4 -l info [program:celery_beat] command=python manage.py celery beat
這樣的配置在容器中是同時運行django,celery。
三,解決方案
1,改進后的配置方案
[inet_http_server] port=9001 username=abc password=123456 [supervisord] nodaemon=true logfile=/var/log/supervisor/supervisord.log ; (main log file;default $cwd/supervisord.log) pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) childlogdir=/var/log/supervisor ; ('auto' child log dir, default $temp) [program:django] command=python manage.py runserver 0.0.0.0:8080 #stdout_logfile = /var/log/supervisord/django_stdout.log loglevel=info redirect_stderr=true [program:celery_worker] command=python manage.py celery worker -c 4 -l info loglevel=info redirect_stderr=true [program:celery_beat] command=python manage.py celery beat loglevel=info redirect_stderr=true
實測發現django的日志輸出會寫到stderr.log文件中,所以在配置文件中將錯誤日志重定向到標準日志里;
redirect_stderr=true
容器中的生成的日志文件如下:
root@a16bc77e96bc:/var/log/supervisor# ls celery_beat-stderr---supervisor-rspq7e.log django-stderr---supervisor-9ls_ka.log celery_beat-stdout---supervisor-t5q4ui.log django-stdout---supervisor-ctsbmq.log celery_worker-stderr---supervisor-trfzc7.log supervisord.log celery_worker-stdout---supervisor-xngebu.log
2,查看日志
運行容器時,將9001端口映射出去,通過ip:9001訪問:
點擊 tail -f 查看各個進程的日志。
感謝各位的閱讀,以上就是“Docker容器中如何運行多條命令”的內容了,經過本文的學習后,相信大家對Docker容器中如何運行多條命令這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。