Docker: port is already allocated
Коротко: Порт хоста, который должен использовать контейнер, уже занят другим контейнером или программой.
Подробнее: Сообщение: Bind for 0.0.0.0:8080 failed: port is already allocated или address already in use. Порт на машине может использоваться одновременно только одним процессом.
Подробности
Причины
- Другой контейнер работает с тем же портом хоста (
-p 8080:80). - Локальная программа (например, сервер разработки, Nginx, локальная база данных) использует порт.
- Старый контейнер всё ещё работает или завис (
docker ps -a). - Несколько проектов Compose с одинаковыми портами.
Решения
- Выясните, кто занимает порт:
docker ps(контейнеры),ss -ltnp | grep 8080илиlsof -i :8080(Linux/macOS),netstat -ano | findstr 8080(Windows). - Остановите/удалите старый контейнер:
docker stop имя && docker rm имя, или в Composedocker compose down. - Выберите другой порт хоста:
-p 8081:80(хост слева, контейнер справа). - Завершите мешающую программу.
- Проверьте записи
portsвdocker-compose.yml; внутри сети контейнерам не нужны опубликованные порты, они обращаются друг к другу по имени.
Примечание
Помните: -p ХОСТ:КОНТЕЙНЕР. Порт контейнера везде может быть 80, порт хоста должен быть свободен. Публикуйте порты только там, где необходимо, а на серверах только на 127.0.0.1 (-p 127.0.0.1:8080:80), чтобы они не были доступны из сети.
См. также: EADDRINUSE, Docker, Тома и сети Docker