Dynamic remote_host
We can improve this by having the xdebug.remote_host
configuration set dynamically.
First, in our start-container
script, we'll run a find and replace to set the remote_host
setting based on environment variable XDEBUG_HOST
.
This will find/replace that everytime we spin up a new container.
#!/usr/bin/env bash
sed -i "s/xdebug\.remote_host\=.*/xdebug\.remote_host\=$XDEBUG_HOST/g" /etc/php/7.0/mods-available/xdebug.ini
php -S 0.0.0.0:80 -t /var/www/html
Then we just need to pass that environment variable through. We can set that up in the docker-compose.yml
file.
version: '2'
services:
app:
build:
context: .
image: xdebug-example:latest
environment:
XDEBUG_HOST: ${XDEBUG_HOST}
volumes:
- ./app:/var/www/html
ports:
- "80:80"
We can then try this out on a new container. Since docker-compose.yml
expects an XDEBUG_HOST
environment variable, we'll set that when we run docker-compose up
.
# Turn off any running containers
docker-compose down
# Re-build it to get latest start-container in a new image
docker-compose build
# Try it out, setting the environment variable on the fly
XDEBUG_HOST=$(ipconfig getifaddr en1) docker-compose up -d
# Confirm our IP address is still correctly set in xdebug.ini
# with in the running contianer
docker-compose exec app cat /etc/php/7.0/mods-available/xdebug.ini
Helper Script
Similar to other videos, we'll make a helper script to make this easier on ourselves.
I'll call this develop
again.
File develop
:
#!/usr/bin/env bash
# Set environment variables for dev
export XDEBUG_HOST=$(ipconfig getifaddr en1) # Specific to Macintosh
if [ $# -gt 0 ]; then
docker-compose "$@"
else
docker-compose ps
fi
This wil get and set our XDEBUG_HOST
environment variable for us, and pass any other flags/arguments along to docker-compose
.
Let's try it out:
# Make it executable
chmod +x develop
# run "ps"
./develop
# Set containers down
./develop down
# Spin containers back up, it will grab
# XDEBUG_HOST automatically
./develop up -d
# We can see it's still set
docker-compose exec app cat /etc/php/7.0/mods-available/xdebug.ini