Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
invalid-volume-specification Linux / DevOps

Docker Error: invalid volume specification — Исправление синтаксиса

Обновлено: 19.08.2026  ·  Официальная база знаний

Архитектура подсистемы Docker Storage и синтаксический анализ путей

Ошибка Error response from daemon: create <path>: invalid characters for a local volume name или invalid volume specification возвращается парсером аргументов CLI/API демона dockerd. Это происходит, когда строка маппинга томов (флаг -v или директива volumes: в Compose) не соответствует стандарту POSIX/Windows, содержит недопустимые двоеточия, пробелы, относительные пути без точки или некорректные флаги монтирования (например, :ro,z,invalid).

Бизнес-риски:

Срыв сборки и развертывания приложений в гетерогенных средах (CI/CD на Windows/Linux runners), невозможность сохранения персистентных данных БД и потеря конфигурационных файлов при деплое.

Сравнительная таблица синтаксиса монтирования томов

Формат / Тип монтированияКорректный примерТипичная синтаксическая ошибка
Named Volumedb_data:/var/lib/postgresql/data/db_data:/var/lib/postgresql/data (распознается как bind mount)
Bind Mount (Linux)/opt/app/conf:/etc/app:roopt/app/conf:/etc/app (отсутствует ведущий слэш)
Bind Mount (Windows/WSL)C:/data:/app/data или /c/data:/app/dataC:/data:/app:ro (лишнее двоеточие ломает парсер)

Пошаговое исправление спецификаций монтирования томов

Сценарий 1: Переход на безопасный расширенный флаг --mount

Флаг --mount использует явные пары ключ-значение, исключая ошибки синтаксиса парсера флага -v:

# Использование строгого синтаксиса --mount:
docker run -d \
  --name webapp \
  --mount type=bind,source='/opt/my app/data',target=/app,readonly \
  nginx:alpine

Сценарий 2: Корректное экранирование путей в Windows и WSL2

При использовании PowerShell или Git Bash на Windows пути преобразуются автоматически, что вызывает ошибки:

# Для PowerShell (абсолютный путь с использованием переменных):
docker run -v '${PWD}/config:/etc/config:ro' nginx

# Для Git Bash (отключение автоматической конвертации путей POSIX):
MSYS_NO_PATHCONV=1 docker run -v 'C:/project/data:/data' alpine

Сценарий 3: Исправление спецификации в docker-compose.yml

Проверьте корректность YAML-разметки и кавычек при наличии переменных окружения:

services:
  db:
    image: postgres:15
    volumes:
      # Именованный том
      - pgdata:/var/lib/postgresql/data
      # Относительный путь (обязательно начинается с ./)
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro

volumes:
  pgdata:

Типовые ошибки администраторов

  • Использование относительных путей без точки: Запись myfolder:/app воспринимается Docker как именованный том myfolder, а не локальная папка. Для bind mount обязательно писать ./myfolder:/app.
  • Использование символа двоеточия в именах папок: Двоеточие является зарезервированным разделителем между хостом и контейнером.
Ошибки монтирования томов нарушают развертывание проектов в кластере?
ITSTM проведет стандартизацию инфраструктурных манифестов Compose и Kubernetes, исключив ошибки кроссплатформенного монтирования.
Практический опыт инженера: При работе в CI/CD с динамическими путями всегда валидируйте переменную окружения через realpath или $PWD. Пустая переменная превратит строку в ':/app', что немедленно приведет к падению с invalid volume specification.

Частые вопросы (FAQ)

Чем отличается именованный том (Named Volume) от Bind Mount?

Именованный том управляется самим Docker в директории /var/lib/docker/volumes/, а Bind Mount монтирует произвольный файл или папку с хостовой ОС.

Почему флаг :z или :Z вызывает ошибку в некоторых ОС?

Флаги :z/:Z предназначены для настройки меток SELinux. На системах без включенного SELinux они могут игнорироваться или вызывать ошибки парсинга в старых версиях.

Как смонтировать один файл, а не целую директорию?

Укажите полный путь к файлу на хосте и в контейнере: -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro. Файл на хосте должен существовать до запуска.

Почему Docker создает пустую папку вместо файла при ошибке пути?

Если путь на хосте не существует, Docker по умолчанию создает новую пустую директорию с этим именем и монтирует ее.