溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Docker容器中如何運(yùn)行多條命令

發(fā)布時(shí)間:2022-05-20 15:26:57 來(lái)源:億速云 閱讀:1830 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“Docker容器中如何運(yùn)行多條命令”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Docker容器中如何運(yùn)行多條命令”吧!

一, 簡(jiǎn)介

dockerfile 運(yùn)行只支持一條命令,當(dāng)在docker里要運(yùn)行多條命令,用supervisor來(lái)管理就比較合適了。

supervisor是一個(gè) python 開(kāi)發(fā)的 client/server 系統(tǒng),可以管理和監(jiān)控類 unix 操作系統(tǒng)上面的進(jìn)程。它可以同時(shí)啟動(dòng),關(guān)閉多個(gè)進(jìn)程,使用起來(lái)特別的方便。

組成部分

supervisor 主要由兩部分組成:

supervisord(server 部分):主要負(fù)責(zé)管理子進(jìn)程,響應(yīng)客戶端命令以及日志的輸出等;
supervisorctl(client 部分):命令行客戶端,用戶可以通過(guò)它與不同的 supervisord 進(jìn)程聯(lián)系,獲取子進(jìn)程的狀態(tài)等。

二,存在的問(wèn)題——日志不輸出

但是使用supervisor,django運(yùn)行的日志就不會(huì)在docker里輸出了,默認(rèn)的輸出如下:

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

這樣的配置在容器中是同時(shí)運(yùn)行django,celery。

三,解決方案

1,改進(jìn)后的配置方案

[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

實(shí)測(cè)發(fā)現(xiàn)django的日志輸出會(huì)寫(xiě)到stderr.log文件中,所以在配置文件中將錯(cuò)誤日志重定向到標(biāo)準(zhǔn)日志里;

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,查看日志

運(yùn)行容器時(shí),將9001端口映射出去,通過(guò)ip:9001訪問(wèn):

Docker容器中如何運(yùn)行多條命令

點(diǎn)擊 tail -f 查看各個(gè)進(jìn)程的日志。

感謝各位的閱讀,以上就是“Docker容器中如何運(yùn)行多條命令”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Docker容器中如何運(yùn)行多條命令這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI