Я наблюдаю странное поведение при запуске tail -f
команда внутри контейнера Docker в CoreOS.
Я могу представить себе ряд переменных, которые могут способствовать возникновению проблемы, но я не уверен, что мне нужно сделать для устранения неполадок в первую очередь. В CoreOS я использую новейшую версию с поддержкой overlayfs, а также более новую версию Docker (1.4.1).
Интересно то, что я могу успешно отслеживать журналы на другой ОС (Ubuntu 14.04), на которой работает другая версия Docker (1.3).
Я могу создать журналы strace, если это поможет в устранении неполадок, они, похоже, значительно различаются между хостами. Например, на хосте, который не работает, strace останавливается после прочтения следующего в выводе strace:
04:03:03 inotify_add_watch(4, "f017f0a1-a1e9-11e4-90bc-027e0f87cac6-paster.log", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1 <0.000028>
04:03:03 fstat(3, {st_mode=S_IFREG|0644, st_size=12229, ...}) = 0 <0.000022>
04:03:03 read(4, 0x7711f0, 64) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <3.101545>
Я просто недостаточно знаком со strace, чтобы хорошо интерпретировать результаты.
Не решение, а обходной путь:
У меня такая же проблема с CoreOS 607.0.0, и я воспроизвел эту проблему в контейнерах на основе Ubuntu или Fedora. Однако контейнеры, использующие busybox, не имеют этой проблемы. Два обходных пути:
1) используйте образ контейнера на основе busybox, например alpine
2) установите busybox в существующий контейнер и запустите
busybox tail -F <logfile>
Это ошибка введено в CoreOS 561, когда файловая система по умолчанию была изменена с btrfs на overlayfs. Я нашел обходной путь в основном форматировать файловую систему с помощью btrfs при первом запуске хоста, и, похоже, сейчас это работает.
Включите в свой CloudInit следующее:
#cloud-config
coreos:
units:
- name: format-var-lib-docker.service
command: start
content: |
[Unit]
Before=docker.service var-lib-docker.mount
ConditionPathExists=!/var/lib/docker.btrfs
[Service]
Type=oneshot
ExecStart=/usr/bin/truncate --size=25G /var/lib/docker.btrfs
ExecStart=/usr/sbin/mkfs.btrfs /var/lib/docker.btrfs
- name: var-lib-docker.mount
enable: true
content: |
[Unit]
Before=docker.service
After=format-var-lib-docker.service
Requires=format-var-lib-docker.service
[Install]
RequiredBy=docker.service
[Mount]
What=/var/lib/docker.btrfs
Where=/var/lib/docker
Type=btrfs
Options=loop,discard