Rumah >Operasi dan penyelenggaraan >Docker >Bagaimana untuk nyahpepijat docker dari jauh (debug)

Bagaimana untuk nyahpepijat docker dari jauh (debug)

PHPz
PHPzasal
2023-04-18 10:24:142596semak imbas

Dengan populariti seni bina perkhidmatan mikro, teknologi kontena telah menjadi semakin popular. Dalam kebanyakan kes, kita perlu nyahpepijat pada aplikasi yang dijalankan dalam bekas untuk menyelesaikan masalah dan mengoptimumkan prestasi. Penyahpepijatan jauh dalam docker adalah keperluan biasa. Artikel ini akan memperkenalkan cara untuk nyahpepijat jauh dalam docker, serta beberapa masalah dan teknik yang mungkin anda hadapi dalam proses tersebut.

1. Pasang alat penyahpepijatan dalam bekas
Untuk nyahpepijat dalam bekas docker, anda mesti memasang alat penyahpepijatan dalam bekas. Di sini kami mengambil sistem Debian sebagai bekas contoh untuk memperkenalkan cara memasang alat penyahpepijatan.

1 Mula-mula mulakan bekas Debian:

docker run -it --name=debug debian /bin/bash

2 senarai:

kemas kini apt-get

3 Pasang alat penyahpepijatan GDB:

apt-get install -y gdb

2 alat kepada Program aplikasi
Selepas memasang alat penyahpepijatan, kita perlu menyambungkan alat penyahpepijatan kepada aplikasi yang sedang berjalan.

1. Mula-mula, anda perlu mendayakan penyahpepijatan jauh melalui pembolehubah persekitaran semasa mencipta bekas:

docker run -it -e DEBUG=true --name=myapp myimage

2. Dapatkan PID aplikasi. Terdapat banyak cara untuk mendapatkan PID aplikasi, seperti menggunakan perintah ps Linux:

ps aux | grep myapp

3 🎜 >gdb -ex "set follow-fork-mod child" -p ${pid}

3. Berikut ialah beberapa arahan GDB yang biasa digunakan:

1 Tetapkan titik putus:

b [file:]fungsi[:line]

2 🎜 >

r [args]

3. Pelaksanaan satu langkah:

s

4 Langkau fungsi semasa:

n

5. Lihat pembolehubah:

cetak var

6 Teruskan pelaksanaan:

c

4. Selesaikan masalah firewall

dalam. kemajuan Apabila menyahpepijat dari jauh, anda mungkin perlu menyambung melalui tembok api, dan anda mungkin menghadapi masalah penyekatan port. Dalam kes ini, kita boleh mengubah suai atribut EXPOSE bekas untuk mendedahkan port yang diperlukan semasa memulakan bekas.

Sebagai contoh, kami ingin mendedahkan port 3000 bekas:


docker run -it -e DEBUG=true --name=myapp -p 3000:3000 myimage

Ini akan membolehkan kami mengakses port 3000 kontena pada mesin tempatan kami.

5. Menghadapi situasi luar biasa

Semasa penyahpepijatan jauh, anda mungkin menghadapi beberapa situasi luar biasa berikut. Berikut ialah beberapa penyelesaian:

1 Bekas tidak menyokong penyahpepijatan GDB

Sesetengah bekas tidak menyokong penyahpepijatan GDB kerana mereka tidak mempunyai maklumat penyahpepijatan yang diperlukan. Penyelesaiannya adalah untuk mencipta imej baharu berdasarkan versi nyahpepijat, yang mengandungi maklumat penyahpepijatan yang diperlukan. Kemudian nyahpepijat dalam imej itu.

2 Sambungan ditolak

Ini mungkin kerana tembok api tidak membenarkan sambungan jauh ke bekas, atau bekas tidak dikonfigurasikan dengan betul. Pastikan port didedahkan dengan betul dan lihat sama ada bekas dikonfigurasikan dengan betul.

3. Maklumat nyahpepijat tidak ditemui

Jika aplikasi anda tidak mempunyai maklumat nyahpepijat yang betul, anda mungkin perlu menyusun semula aplikasi dan menggunakan bendera -debug untuk memasukkan maklumat nyahpepijat dalam aplikasi. Jika anda tidak mempunyai akses kepada kod sumber, anda mungkin perlu menghubungi pembangun.

Ringkasan

Penyahpepijatan jauh dalam docker ialah kemahiran yang sangat berguna yang boleh membantu kami menyelesaikan masalah dan menyelesaikan masalah dengan cepat serta meningkatkan prestasi aplikasi. Artikel ini memperkenalkan langkah asas untuk penyahpepijatan jauh dalam docker dan cara menyelesaikan beberapa masalah yang mungkin timbul. Dengan menguasai kemahiran asas ini, anda akan dapat memahami teknologi kontena dengan lebih baik dan mencari serta menyelesaikan masalah dengan lebih cepat.

Atas ialah kandungan terperinci Bagaimana untuk nyahpepijat docker dari jauh (debug). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn