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