прикрепить фоновый процесс к /dev/tty из файла Procfile мастера во время запуска контейнера докеров

Большинство вопросов, связанных с /dev/tty и докером, сосредоточены вокруг docker run.

У меня есть агент мониторинга (в частности, newrelic-nr-agent), который должен оставаться на переднем плане, чтобы позволить foreman управлять им. Когда скрипт вызывается после сборки и запуска контейнера, все в порядке. Было бы лучше запустить агент на этапе docker-compose up (именно так запускаются мои контейнеры) и не нужно входить в работающий контейнер для запуска агента.

Я не могу обязательно исправить скрипт, потому что он установлен из репозитория New Relic apt.

Я просмотрел сбой сборки, потому что /dev/tty не доступно, но это не решает мою проблему. Образ создается успешно, но не запускается из-за сбоя агента мониторинга.

Соответствующая строка в моем Procfile:

nginx-nr-agent: /usr/bin/nginx-nr-agent.py -f start

И в докерфайле:

# ENV TERM vt100 ENV TERM tty

Я пробовал обе настройки по отдельности и без настроек. Ни одна настройка не работает.

Ошибка мастера:

app_1 | 17:26:36 nginx-nr-agent.1 | Traceback (most recent call last): app_1 | 17:26:36 nginx-nr-agent.1 | File "/usr/bin/nginx-nr-agent.py", line 610, in <module> app_1 | 17:26:36 nginx-nr-agent.1 | main() app_1 | 17:26:36 nginx-nr-agent.1 | File "/usr/bin/nginx-nr-agent.py", line 583, in main app_1 | 17:26:36 nginx-nr-agent.1 | daemon_runner = MyDaemonRunner(app) app_1 | 17:26:36 nginx-nr-agent.1 | File "/usr/bin/nginx-nr-agent.py", line 521, in __init__ app_1 | 17:26:36 nginx-nr-agent.1 | runner.DaemonRunner.__init__(self, app) app_1 | 17:26:36 nginx-nr-agent.1 | File "/usr/lib/python2.7/dist-packages/daemon/runner.py", line 80, in __init__ app_1 | 17:26:36 nginx-nr-agent.1 | self.daemon_context.stdout = open(app.stdout_path, 'w+') app_1 | 17:26:36 nginx-nr-agent.1 | IOError: [Errno 6] No such device or address: '/dev/tty' app_1 | 17:26:36 nginx-nr-agent.1 | exited with code 1


person Brian Clarkson    schedule 25.02.2016    source источник


Ответы (1)


Для потомков решение:

В докерфайле:

ENV TERM tty

В файле docker-compose.yml:

tty: true

В профайле:

nginx-nr-agent: /usr/bin/nginx-nr-agent.py -f start

tty: true в docker-compose.yml недоставало!

person Brian Clarkson    schedule 31.03.2016
comment
Чувак, у меня была эта проблема НЕДЕЛЯМИ. Google даже не помог, я, наконец, использовал Duck Duck Go, искал nginx docker No such device or address и нашел это неясное решение. Спасибо, что поделились с потомками. В частности, моя ошибка была nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (6: No such device or address), потому что я запускал скрипт Node.js npm в докере для разработки. (Я также говорю для потомков) - person Sam Eaton; 01.09.2018