Running PHPUnit within a Docker container with PhpStorm

Attila Szeremi picture Attila Szeremi · Nov 4, 2015 · Viewed 11.3k times · Source

I want to configure my PhpStorm IDE to run PHPUnit tests within my Docker container.

It seems like I'm restricted to either using a local PHP executable, or one through SSH, as the interpreter for the tests.

I could install an SSH service on my PHP container, but it seems like a bit of a hacky solution, and articles online discourage installing an SSH service on containers.

To try and get a local interpreter working, I tried creating a bash script that would proxy calls to PHP within the container, like this:

#!/usr/bin/env bash

# Run PHP through Docker
docker exec -t mycontainer_php_1 php "$@"

This works perfectly when I run it myself, but when I point PhpStorm to it as a local PHP interpreter, it doesn't recognize it as a valid PHP executable.

So what's a good way to get this working?

Answer

grim picture grim · Feb 20, 2017

With PhpStorm now having better integration with Docker engine (including Docker for Mac), you can now just do the following (or read this article):

Command line:

  1. Pull the phpunit Docker image: docker pull phpunit/phpunit
  2. (Mac and maybe Windows) Bridge the Docker socket to the API_URL: socat -d TCP-LISTEN:2376,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock

Then Phpstorm:

  1. Configure connection to Docker engine:
    • Go to Settings -> Build, Execution, Deployment -> Docker
    • Create a new Docker configuration with API URL set to:
      • Linux: unix:///var/run/docker.sock
      • Windows and Mac: http://127.0.0.1:2376 or tcp://localhost:2376
  2. Configure the remote interpreter:
    • Go to Settings -> Languages & Frameworks -> PHP
    • Create a new PHP CLI interpreter by:
      • Clicking on ... then + and 'Remote...'
      • Select Docker with:
        • ServerImage:
        • Image name: phpunit/phpunit:latest
        • PHP executable: php
  3. Configure Phpunit:
    • Go to Settings -> Languages & Frameworks -> PHP -> PHPUnit
    • Create new Phpunit configuration (+ then 'By Remote interpreter...' and select
    • Set Use Composer Autoloader
    • Path to script: /opt/project/vendor/autoload.php
    • Default configuration file: /opt/project/phpunit.xml.dist
  4. Try to run your tests!