Медленное монтирование томов Docker с большим количеством файлов в Linux - PullRequest
0 голосов
/ 03 января 2019

Мы наблюдаем очень странное поведение при подключении томов с большим объемом данных (например, миллион файлов)

Текущая настройка:

  • Хост докера: контейнер Linux от CoreOS1465.7.0 (Божья коровка)
  • Клиент версии Docker: 18.06.1-ce
  • Хост версии Docker: 17.09.0-ce

Я пробовал разные версиидокеров и CoreO, как новых, так и старых версий без каких-либо различий.Каталог данных на Docker-хосте, вероятно, сопоставлен с каким-то хранилищем, я не уверен насчет настройки здесь, но я могу заполнить детали при необходимости, но с моей точки зрения это выглядит как обычная папка.

Первоначальная ошибка произошла при переключении с анонимного тома, смонтированного через фиктивный контейнер (docker-compose v1), на именованный том (docker-compose v3).После создания именованного тома я закрываю docker-сервис и вручную копирую файлы со старого тома на новый.Это было протестировано с небольшими объемами данных, и это работает, так что, похоже, это не проблема с фактическими перемещающимися данными во внутреннем / var / lib / docker-domain.Я также могу воссоздать эту проблему с новой установкой, где я копирую прилично большой объем данных.

Сборка контейнера с compose отлично работает:

myservice:
  build: myservice
  restart: always
  ports:
    - "8080:8080"
  volumes:
    - type: volume
      source: repo
      target: /home/repo

volumes:
  repo:

Том репо, содержащий том с большим количеством данных.Теперь, когда я пытаюсь запустить сервисы, я получаю тайм-аут, и сервис застревает в «Создано»:

ERROR: for my-servce-new_exp_1  HTTPSConnectionPool(host='xxxx.xx.xxx.xxx', port=2376): Read timed out. (read timeout=60)

ERROR: for exp  HTTPSConnectionPool(host='xxx.xx.xxx.xxx', port=2376): Read timed out. (read timeout=60)
ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.

If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60).

Я пытался увеличить тайм-аут, но что-то я получаю другой тайм-аутчерез некоторое время.

Теперь, если я перезапускаю docker-сервис или хост сейчас, сервис запускается и работает (но при таком способе возникают проблемы с внутренним dns-отображением между сервисами)

Если я добавляю сервис с пустым / небольшим томом, он работает как положено.

Из любопытства я обнаружил, что, возможно, что-то освобождается при попытке монтировать тот же том в докер-контейнер:

docker run -it --rm --name rmytest --volume my-service-new_repo:/data ubuntu:latest

Время ожидания истечет, например, через 30 минут.

Если я, с другой стороны, добавлю какой-либо параметр к параметру консистенции отображения тома, он будет запущен в паресекунд:

docker run -it --rm --name rmytest --volume my-service-new_repo:/data:consistent ubuntu:latest

Не удалось добавить те же параметры к файлам компоновки, например,

volumes:
  - type: volume
    source: repo
    target: /home/repo
    consistency: delegated

Дает те же результаты;тайм-аут и не работает.Любая помощь и указатели в правильном направлении будет высоко ценится.

...