Ошибка при запуске контейнера Linux в экземплярах контейнера Azure: не удалось открыть файл журнала «/var/log/pods /…/ _0.log»

#azure-container-instances

#azure-container-instances

Вопрос:

Я запускаю приложение .NET Core в контейнере Linux.

Контейнер работает нормально локально, но при запуске в экземплярах контейнера Azure он немедленно останавливается.

Файл журнала контейнера показан ниже (получен с помощью Get-AzContainerInstanceLog ):

 failed to open log file "/var/log/pods/336d7870-5a8e-11e9-925e-000d3a0ddc4a/test-1_0.log": 
open /var/log/pods/336d7870-5a8e-11e9-925e-000d3a0ddc4a/test-1_0.log: no such file or directory
  

Редактировать:

Я никогда раньше не сталкивался с указанным файлом или pods путем ( /var/log/pods/336d7870-5a8e-11e9-925e-000d3a0ddc4a/test-1_0.log ), и я понятия не имею, какая часть ОС и / или Docker нуждается в этом.

Файл журнала и путь — это не то, что используется моим приложением, запущенным внутри контейнера (оно регистрируется непосредственно на консоли и, как уже упоминалось, нормально работает в контейнере Linux в моей локальной установке Docker для Windows).

Google говорит, что это может быть связано с Kubernetes, но я не использую Kubernetes «активно» (т. Е. Он может использоваться экземплярами контейнера Azure под прикрытием, но это не то, о чем я, как пользователь ACI, знаю). Извините за неясное описание ошибки, я попытаюсь перефразировать его.

Комментарии:

1. Вы можете подключиться к экземпляру и проверить, действительно ли он пропускает файл.

2. Файл не существует, и я понятия не имею, какая часть ОС и / или Docker нуждается в нем. Google говорит, что это может быть связано с Kubernetes, но я не использую Kubernetes (хотя, вероятно, он используется экземплярами контейнера Azure под обложками). Извините за неясное описание ошибки, я попытаюсь перефразировать его.

3. Вам удалось выяснить, почему? У меня тоже такая же проблема.

4. IIRC проблема заключалась в том, что я пытался передать аргумент командной строки в контейнер, что не сработало в Azure. Я переключился с использования аргументов командной строки на переменные среды, и все сработало как по волшебству. Итак, для меня эта ошибка возникла, когда контейнер не удалось запустить. Я думаю, что было предоставлено лучшее описание ошибки, скрытое на виду в одной из вкладок / блейдов на портале Azure.

Ответ №1:

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

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

Итак, для меня эта ошибка возникла, когда контейнер не удалось запустить.

Было предоставлено лучшее описание ошибки, скрытое на виду в одной из вкладок / блейдов на портале Azure.

Ответ №2:

В моем случае я ранее установил tini и установил для точки входа в Dockerfile значение /sbin/tini -- . После этого допустимо установить для CMD файла Dockerfile базовую строку без каких-либо кавычек, например CMD java -jar myapp.jar

Однако в Azure вы ДОЛЖНЫ задать команду в виде массива сегментов строки:

в YAML: command: ["java", "-jar", "myapp.jar"]

Как только я это сделал, ошибка выше («не удалось открыть файл журнала») исчезла, и мой контейнер успешно запустился.

Ссылка на Azure