Docker容器调试应用程序

因为Docker技术的火热,因此在工作中我们经常会以容器的方式来运行一个应用。每当容器无法成功运行或者想要对容器中的应用参数、应用配置以及应用启动进行深入研究时,当然希望能够像在宿主机上调试程序一样在容器中调试应用。容器的本质包括应用与应用运行所依赖的环境, 因此首先需要创建一个空壳容器(没有运行应用的应用容器),然后进入容器中调试应用。此处的空壳容器提供了应用运行所需的环境,进而可方便的在其中调试应用。实践环境:Centos7.2+Docker1.12.6。

比较规范的镜像的Dockerfile中通常会有ENTRYPOINT与CMD的定义(Docker官方推荐这样做)。因此容器的启动命令则为ENTRYPOINT所对应的脚本或可执行程序加上CMD中定义的内容。比如elasticsearch的Dockerfile定义的ENTRYPOINT与CMD分别为:ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["elasticsearch"],则创建的容器的启动命令为: /docker-entrypoint.sh elasticsearch ;mysql的Dockerfile:ENTRYPOINT ["docker-entrypoint.sh"] CMD ["mysqld"],则创建的容器的启动命令为: /docker-entrypoint.sh mysqld 。所以想要知道一个容器的启动命令需要首先了解其镜像的Dockerfile中ENTRYPOINT与CMD的定义。如何查看一个镜像的ENTRYPONT与CMD的值呢?一般采用如下两种方式:

上述第一种方式适用于比较规范的镜像,这类镜像通常会提供清晰、具体的Dockerfile。第二种方式适用于各种镜像,尽管是不规范的镜像。通过history、inspect两个命令的任一个均可快速、方便的查看镜像的ENTRYPOINT与CMD的值。

若要调试容器中的应用程序,则需额外的设置实现。docker run命令提供的--entrypoint参数能够覆盖Dockerfile中默认定义的ENTRYPOINT;docker run [OPTIONS] IMAGE [COMMAND] [ARG...]的COMMAND能够替换Dockerfile中定义的CMD。通过上面的示例可以发现,有的镜像的Dockerfile中ENTRYPOINT值为:/docker-entrypoint.sh,CMD为应用的可执行程序;有的镜像的Dockerfile中ENTRYPOINT值为应用的可执行程序,CMD为可执行程序的参数。因此针对不同的镜像想要创建空壳容器其方式是不同的。

容器其实是应用与应用运行所依赖的环境,创建空壳容器即提供了应用所需要的环境,进入此环境中可以调试应用,可以验证应用的各个参数,同样更可以像在宿主机中运行程序一样在此环境中运行应用,区别仅是容器与宿主机的两个环境。上面是对如何在容器中调试应用程序做的一些记录,希望与大家一起讨论、交流,一起学习。



  • 瀹瑰櫒docker鐨浣滅敤鏄粈涔
    绛旓細锛2锛夐珮鍒╃敤鐜囦笌闅旂锛瀹瑰櫒鏈嶅姟娌℃湁绠$悊绋嬪簭鐨勯澶栧紑閿锛屼笌搴曞眰鍏变韩鎿嶄綔绯荤粺锛屾ц兘鏇村姞浼樿壇锛岀郴缁熻礋杞芥洿浣庯紝鍦ㄥ悓绛夋潯浠朵笅鍙互杩愯鏇村鐨勫疄渚嬶紝鍏呭垎鍒╃敤绯荤粺璧勬簮銆傚悓鏃讹紝瀹瑰櫒鎷ユ湁涓嶉敊鐨勮祫婧愰殧绂讳笌闄愬埗鑳藉姏锛屽彲浠ョ簿纭湴瀵搴旂敤鍒嗛厤CPU銆佸唴瀛樼瓑璧勬簮锛屼繚璇佷簡搴旂敤闂翠笉浼氱浉浜掑奖鍝嶃傦紙3锛夊揩閫熼儴缃蹭笌寰湇鍔★細Docker閫氳繃...
  • 濡備綍鍦―ocker瀹瑰櫒涓繍琛孏UI绋嬪簭
    绛旓細docker build --rm -t firefox .4. 杩愯Docker瀹瑰櫒 鐜板湪锛屽鏋滀竴鍒囬『鍒╋紝鎴戜滑鐜板湪鍙互鍦ㄨ繍琛屽湪CentOS 7闀滃儚涓殑Docker瀹瑰櫒閲岄潰杩愯鎴戜滑鐨凣UI绋嬪簭涔熷氨鏄疐irefox娴忚鍣ㄤ簡銆俤ocker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix firefox 鎬荤粨 鍦―ocker瀹瑰櫒涓繍琛孏UI绋嬪簭鏄竴娆...
  • docker浠涔堟剰鎬
    绛旓細Docker灏搴旂敤绋嬪簭鍜屽叾渚濊禆椤规墦鍖呭湪瀹瑰櫒涓紝鍏朵腑鍖呮嫭杩愯鏃剁幆澧冦佸簱鍜岄厤缃紝浣垮緱搴旂敤绋嬪簭鑳藉鍦ㄤ换浣曞湴鏂逛互鐩稿悓鐨勬柟寮忚繍琛屻傝繖绉嶅鍣ㄥ寲鎶鏈篃鎻愪緵浜嗘洿楂樼殑瀹夊叏鎬э紝鍥犱负瀹瑰櫒鍙互琚殧绂诲湪涓涓嫭绔嬬殑铏氭嫙鐜涓紝浣垮緱搴旂敤绋嬪簭涓庝富鏈虹郴缁熼殧绂诲紑鏉ワ紝鍑忓皯浜嗘敾鍑昏呰繘琛屾敾鍑荤殑鏈轰細銆Docker鐨浼樺娍鍦ㄤ簬鍙互鍦ㄤ笉鍚岀殑鐜涓...
  • Docker鐨勫簲鐢鍦烘櫙鍙婁紭鐐?
    绛旓細1銆佸揩閫燂紝涓鑷村湴浜や粯鎮ㄧ殑搴旂敤绋嬪簭 Docker 鍏佽寮鍙戜汉鍛樹娇鐢ㄦ偍鎻愪緵鐨勫簲鐢ㄧ▼搴忔垨鏈嶅姟鐨勬湰鍦板鍣ㄥ湪鏍囧噯鍖栫幆澧冧腑宸ヤ綔锛屼粠鑰岀畝鍖栦簡寮鍙戠殑鐢熷懡鍛ㄦ湡銆傚鍣ㄩ潪甯搁傚悎鎸佺画闆嗘垚鍜屾寔缁氦浠橈紙CI / CD锛夊伐浣滄祦绋嬶紝璇疯冭檻浠ヤ笅绀轰緥鏂规锛氬紑鍙戜汉鍛樺湪鏈湴缂栧啓浠g爜锛屽苟浣跨敤 Docker 瀹瑰櫒涓庡悓浜嬪叡浜粬浠殑宸ヤ綔銆備娇鐢 Docker 灏嗗叾...
  • 濡備綍鍦―ocker瀹瑰櫒涓繍琛孏UI绋嬪簭
    绛旓細瀹冩病鏈夎瑷鏀寔銆佹鏋舵垨鑰呮墦鍖呯郴缁熺殑闄愬埗锛屽苟鍙互杩愯鍦ㄤ换浣曞湴鏂广佷换浣曟椂鍊欙紝浠庡皬鍨嬬殑瀹剁敤鐢佃剳鍒伴珮绔殑鏈嶅姟鍣ㄩ兘鍙互杩愯銆傝繖璁╀汉浠彲浠ユ墦鍖呬笉鍚岀殑鍖呯敤浜庨儴缃插拰鎵╁睍缃戠粶搴旂敤锛屾暟鎹簱鍜屽悗绔湇鍔¤屼笉蹇呬緷璧栦簬鐗瑰畾鐨勬爤鎴栬呮彁渚涘晢銆備笅闈㈡槸鎴戜滑璇ュ浣鍦―ocker瀹瑰櫒涓繍琛孏UI绋嬪簭鐨勭畝鍗曟楠ゃ傛湰鏁欑▼涓紝鎴戜滑浼氱敤...
  • docker鎬庝箞鏌ョ湅瀹瑰櫒鏃ュ織
    绛旓細閿欒鏃ュ織銆佽闂棩蹇楃瓑銆傝繖浜涙棩蹇楀浜庢晠闅滄帓闄ゃ佹ц兘鐩戞祴鍜搴旂敤绋嬪簭璋冭瘯闈炲父閲嶈銆傝鏌ョ湅Docker瀹瑰櫒鐨勬棩蹇楋紝鍙互浣跨敤浠ヤ笅鏂规硶锛1銆佷娇鐢╠ocker logs鍛戒护锛氳繖鏄渶绠鍗曠殑鏂规硶锛岄氳繃璇ュ懡浠ゅ彲浠ユ煡鐪嬪鍣ㄧ殑鏃ュ織杈撳嚭銆備緥濡傦細瑕佹煡鐪嬪悕涓衡漨y-container鈥濈殑瀹瑰櫒鐨勬棩蹇楋紝鍙互杩愯浠ヤ笅鍛戒护锛歞ocker logs my-container ...
  • Docker:瀹瑰櫒绠$悊(鍚姩鍙傛暟,鏌ョ湅瀹瑰櫒鍜屾棩蹇,杩涘叆鍜屼慨鏀瑰鍣)
    绛旓細闄や簡docker stop鍛戒护杩樻湁涓绉嶅仠姝瀹瑰櫒鐨勫懡浠 docker kill 锛岀浉姣斾簬docker stop锛宒ocker kill鏄 寮哄埗绔嬪嵆鍋滄 锛岃宒ocker stop鏄厛缁欎簡瀹瑰櫒10绉掞紙榛樿锛夌殑鏃堕棿锛屼娇寰楀鍣ㄦ湁涓瀹氱殑鏃堕棿澶勭悊銆佷繚瀛绋嬪簭鎵ц鐜板満锛 浼橀泤鐨勯鍑虹▼搴 锛屼緥濡 鍦ㄥ鍣ㄥ仠姝箣鍚庡彲浠ヤ娇鐢 docker start 鍐嶅惎鍔ㄤ竴涓仠姝㈢殑瀹瑰櫒锛屼緥濡 闄ゆ...
  • 6澶у垎绫,17澶ф湁鐢ㄧ殑docker宸ュ叿,浣犵煡閬撳嚑涓?
    绛旓細宸ュ叿閾炬帴锛歨ttps://about.gitlab.com/features/gitlab-ci-cd/ 浣跨敤鎴愭湰锛• 绀惧尯鐗堬細鍏嶈垂锛屾棤闄愮敤鎴 • 浼佷笟鐗堝叆闂細3.25 缇庡厓/鐢ㄦ埛/鏈 • 浼佷笟鐗堥珮绾х増锛16.59缇庡厓/鐢ㄦ埛/鏈 3锛岃褰 Logspout鏄府鍔╃鐞鍦―ocker瀹瑰櫒涓繍琛岀殑绋嬪簭鐢熸垚鐨勬棩蹇楃殑涓涓緢濂界殑宸ュ叿銆傚畠灏嗗鍣搴旂敤绋嬪簭...
  • k8s鍜docker鍖哄埆
    绛旓細鈶″彲绉绘鎬э細Docker瀹瑰櫒鍙互鍦ㄤ换浣曞湴鏂硅繍琛岋紝鏃犻渶淇敼锛屼粠鑰屽疄鐜颁簡鍦ㄤ笉鍚岀殑鐜涓揩閫熷垎鍙戙侀儴缃插拰绉绘搴旂敤銆傗憿绠娲佹э細Docker瀹瑰櫒涓粎鍖呭惈鎵闇鐨勭粍浠跺拰杞欢鍖咃紝涓嶅儚铏氭嫙鏈洪渶瑕佽繍琛屾暣涓搷浣滅郴缁燂紝鍥犳鍏锋湁鏇村皬鐨勫瓨鍌ㄥ拰鍐呭瓨寮閿銆傗懀鍙噸澶嶆э細Docker瀹瑰櫒鐨勬瀯寤哄拰閮ㄧ讲杩囩▼鍙互鑷姩鍖栵紝浠庤屼繚璇佷簡搴旂敤绋嬪簭鐨勫彲...
  • 濡備綍浣跨敤 Dock 鎺ュ彛鏉ユ彁楂樼郴缁熺殑鏁堢巼?
    绛旓細濡備綍閫氳繃Dock鎺ュ彛鎻愬崌绯荤粺鐨勬晥鐜囷細涓涓叏闈㈡寚鍗Docker锛岃繖涓紑婧愮殑瀹瑰櫒鍖栧钩鍙帮紝姝d互鎯婁汉鐨勬晥鐜囦紭鍖栫潃鎴戜滑鐨搴旂敤绋嬪簭閮ㄧ讲鍜岀鐞嗐傚熷姪鍏剁嫭鐗圭殑鎶鏈紝璁╁簲鐢ㄧ▼搴忓強鍏朵緷璧栧湪鐙珛銆侀殧绂荤殑鐜涓繍琛岋紝涓嬮潰鎴戜滑灏嗘繁鍏ユ帰璁ㄥ浣曞埄鐢―ock鐨勬帴鍙o紝璁╃郴缁熻繍琛屽緱鏇村姞楂樻晥銆備竴銆丏ock鎺ュ彛绛栫暐涓庡簲鐢1. Dockerfile锛 浣滀负Docker...
  • 扩展阅读:进入docker容器 ... docker常用的十个命令 ... docker容器面试题 ... 手机docker容器 ... 为什么docker被淘汰了 ... docker强制停止所有容器 ... docker运行windows程序 ... docker容器状态转换过程 ... docker容器具有以下特点 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网