मेरे पास 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
Lauren Black 9 नवम्बर 2018, 21:41

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

यह मुझे मेरे मुख्य वेब कंटेनर को मारे बिना फ्लाई पर इन-आईडीई स्पॉट डिबगिंग करने में सक्षम होने की अनुमति देता है।

0
Lauren Black 14 नवम्बर 2018, 01:31