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