Xdebug container does not connect with Visual Studio Code

Asked

Viewed 143 times

1

I am having problems trying to debug an application that is running in a container using Xdebug. Apparently, Xdebug does not connect to my IDE even though I am listening to port 9001. I am using Linux, so I cannot use the host.docker.internal in the directive xdebug.remote_host of Xdebug.ini, even trying to use an alternative solution on my dockerfile: RUN ip -4 route list match 0/0 | awk '{print $3 " host.docker.internal"}' >> /etc/hosts.

Dockerfile:

FROM ubuntu:14.04

ARG DEBIAN_FRONTEND=noninteractive

USER root

#####################################
# Non-Root User:
#####################################

# Add a non-root user to prevent files being created with root permissions on host machine.
ARG PUID=1000
ARG PGID=1000

ENV PUID ${PUID}
ENV PGID ${PGID}

RUN groupadd -g ${PGID} ubuntu && \
    useradd -u ${PUID} -g ubuntu -m ubuntu && \
    apt-get update -yqq

# RUN apt-get install -y software-properties-common && \
    # add-apt-repository -y ppa:ondrej/php

# PHP 5 AND EXTENSIONS INSTALL
RUN apt-get update && \
    apt-get install -y \
        php5-cli \
        php5-common \
        php5-curl \
        php5-json \
        # php5-xml \
        # php5-mbstring \
        php5-mcrypt \
        php5-mysql \
        # php5-sqlite3 \
        # php5-zip \
        # php5-bcmath \
        php5-gd \
        php5-dev \
        pkg-config \
        libcurl4-openssl-dev \
        libedit-dev \
        libssl-dev \
        libxml2-dev \
        xz-utils \
        libsqlite3-dev \
        git \
        curl \
        vim \
        nano \
    && apt-get clean

# APACHE2 AND APACHE_PHP 5 INSTALL with rewrite enabled
RUN apt-get update -q && apt-get install -yqq --force-yes \
        apache2 \
        libapache2-mod-php5 \
    && apt-get clean \
    && a2enmod rewrite

# ENABLE MCRYPT
RUN php5enmod mcrypt

# Source the bash
RUN . ~/.bashrc

# ADD DEFAULT VHOST
COPY ./docker/000-default.conf /etc/apache2/sites-available/000-default.conf

#####################################
# xDebug:
#####################################
USER root

RUN apt-get install -y --force-yes php5-xdebug && \
    sed -i 's/^;//g' /etc/php5/cli/conf.d/20-xdebug.ini && \
    echo "alias phpunit='php -dzend_extension=xdebug.so /var/www/vendor/bin/phpunit'" >> ~/.bashrc 

RUN ip -4 route list match 0/0 | awk '{print $3 " host.docker.internal"}' >> /etc/hosts

# ADD for REMOTE debugging
COPY ./docker/xdebug.ini /etc/php5/cli/conf.d/xdebug.ini

#####################################
# NODE INSTALL:
#####################################
USER ubuntu

# Check if NVM needs to be installed
ARG NODE_VERSION=6.9
ENV NVM_DIR /home/ubuntu/.nvm

RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash && \
        . $NVM_DIR/nvm.sh && \
        nvm install ${NODE_VERSION} && \
        nvm use ${NODE_VERSION} && \
        nvm alias ${NODE_VERSION} 

# Wouldn't execute when added to the RUN statement in the above block
# Source NVM when loading bash since ~/.profile isn't loaded on non-login shell
RUN echo "" >> ~/.bashrc && \
    echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc && \
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm' >> ~/.bashrc 

# Add NVM binaries to root's .bashrc
USER root

RUN echo "" >> ~/.bashrc && \
    echo 'export NVM_DIR="/home/ubuntu/.nvm"' >> ~/.bashrc && \
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm' >> ~/.bashrc 

#####################################
# TESSERACT INSTALL:
#####################################

RUN apt-get install tesseract-ocr -y

# Clean up
RUN apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

# Set default work directory
WORKDIR /var/www/html

Xdebug.ini:

; Defaults
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_port=9001
xdebug.remote_host=host.docker.internal
xdebug.remote_handler=dbgp

; The Linux way
xdebug.remote_connect_back=1

; idekey value is specific to Visual Studio Code
xdebug.idekey=VSCODE

; Optional: Set to true to always auto-start xdebug
xdebug.remote_autostart=true

Docker-Compose.yml:

version: '3.1'
services:
  smarty-center:
    build:
      dockerfile: ./docker/Dockerfile
      context: .
    ports:
      - "80:80"
    links:
      - mysql56:mysql
    volumes:
      - .:/var/www/html
    container_name: app
    networks:
      - homologacao-network
    depends_on:
      - mysql56
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - MYSQL_ROOT_PASSWORD=nopass
    ports:
      - "8000:80"
    links:
      - mysql56:db
    container_name: phpmyadmin
    networks:
      - homologacao-network
    depends_on:
      - mysql56
  mysql56:
    image: mysql:5.6
    environment:
      - MYSQL_ROOT_PASSWORD=nopass
    volumes:
      - ./docker/mysql:/var/lib/mysql
    container_name: mysql56
    networks:
      - homologacao-network
    ports:
      - "3306:3306"
networks:
  homologacao-network:
    driver: bridge

Lauch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Xdebug for Project smarty center",
            "type": "php",
            "request": "launch",
            "port": 9001,
            "log": true,
            "pathMappings": {
                "/var/www/html": "${workspaceRoot}"
            }
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9001
        }
    ]
}
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.