मेरे पास Xdebug से सुसज्जित एक पूरी तरह से स्थापित डॉकटर वातावरण है, जिसे PhpStorm के साथ ठीक से स्थापित किया गया है। मेरे पर्यावरण में विभिन्न कार्यों के लिए कई कंटेनर चल रहे हैं। सब बढ़िया काम करता प्रतीत होता है। सीएलआई/वेब इंटरैक्शन दोनों ब्रेकप्वाइंट पर रुकते हैं जैसा कि उन्हें करना चाहिए, कोई समस्या नहीं है। तथापि ...
मेरे पास एक कोड स्निपेट निम्नानुसार है:
// test.php
$host = gethostbyname('db'); //'db' is the name of the other docker box, created with docker-compose
echo $host;
अगर मैं इसे 'वेब' डॉकर इंस्टेंस में बैश के माध्यम से चलाता हूं:
php test.php
172.21.0.2
अगर मैं इसे ब्राउज़र के माध्यम से चलाता हूं:
172.21.0.2
अगर मैं इसे PhpStorm रन/डीबग बटन (Shift + F9) के माध्यम से चलाता हूं:
docker://docker_web:latest/php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=172.17.0.1 /opt/project/test.php
db
यह हल नहीं करता है! ऐसा क्यों होगा, और मैं इसे कैसे ठीक कर सकता हूं?
1 उत्तर
जैसा कि होता है, मेरा डॉकटर वातावरण डॉकर-कंपोज़ के साथ बनाया गया है, और सभी संबंधित कंटेनर एक ही नेटवर्क पर हैं, और एक उचित डिपेंड्स_ऑन पदानुक्रम है।
तथापि। PHPStorm को वास्तव में docker-compose के बजाय सादे docker का उपयोग करने के लिए स्थापित किया गया था। यह डोकर डेमॉन को ठीक से जोड़ रहा था, लेकिन क्योंकि कंटेनर को कंपोजर-अवेयर नहीं बनाया जा रहा था, यह नेटवर्क लेआउट का लाभ नहीं उठा रहा था जिसे मेरे docker-compose.yml में परिभाषित किया गया था। एक बार जब मैंने PHPStorm को docker-compose का उपयोग करने के लिए कहा, तो इसने ठीक काम किया।
एक तरफ के रूप में, मैंने देखा कि जब मैं अपने कंटेनर को लोड करने के बाद एक इन-आईडीई डीबग सत्र चलाता हूं, और स्क्रिप्ट समाप्त होने पर कंटेनर से बाहर निकलने का कारण बनता है। इसके आसपास जाने के लिए, मुझे मांग पर उपयोग करने के लिए PHPStorm के लिए एक मिरर डिबग कंटेनर बनाना था। मेरी विन्यास इस प्रकार है:
version: '3'
services:
web: &web
build: ./web
container_name: dev_web
ports:
- "80:80"
volumes:
- ${PROJECTS_DIR}/project:/srv/project
- ./web/logs/httpd:/var/log/httpd
depends_on:
- "db"
networks:
- backend
web-debug:
<< : *web
container_name: dev_web_debug
ports:
- "8181:80"
command: php -v
db:
image: mysql
container_name: dev_db
ports:
- "3306:3306"
volumes:
- ./db/conf.d:/etc/mysql/conf.d
- ./db/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
networks:
- backend
networks:
backend:
driver: bridge
यह मुझे मेरे मुख्य वेब कंटेनर को मारे बिना फ्लाई पर इन-आईडीई स्पॉट डिबगिंग करने में सक्षम होने की अनुमति देता है।
नए सवाल
php
PHP एक व्यापक रूप से उपयोग किया जाता है, उच्च-स्तरीय, गतिशील, वस्तु-उन्मुख, और व्याख्या की गई स्क्रिप्टिंग भाषा मुख्य रूप से सर्वर-साइड वेब विकास के लिए डिज़ाइन की गई है। PHP भाषा के बारे में सवालों के लिए इस्तेमाल किया।