Try to use `php -S 0.0.0.0:8080`: ``` docker run --name php -v $(pwd):/app -w /app -p 8080:8080 -d --rm php:cli php -S 0.0.0.0:8080 -t . index.php ``` *Explanation*: The `localhost`(or `127.0.0.1`) address is attached to the container namespace, so anything outside of this namespace cannot have access to it. Furthermore, the `0.0.0.0` (in this context) is a specific address that means *all IPv4 addresses on the local machine*. If you check inside the container, you could see: ``` $ ip a lo: link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever eth0: link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever ``` The `eth0` interface is the interface used when you forward the port. As you don't specify the IP address of the container, you can use the `0.0.0.0` to listen on the `eth0` interface. I don't know if I make my self clear, but you can (should) read this if you want to know more: - https://pythonspeed.com/articles/docker-connection-refused/ - https://superuser.com/questions/949428/whats-the-difference-between-127-0-0-1-and-0-0-0-0