как настроить dockerfle run nohup php test. php> myscript.log 2> & 1 & - PullRequest
0 голосов
/ 27 февраля 2020

Как установить dockerfile run nohup php test.php >myscript.log 2>&1 &?

my dockerfile

FROM php:5.4-apache
RUN docker-php-ext-install sockets
WORKDIR /var/www/html/

COPY ./ ./
EXPOSE 8005 80 443
RUN bash -c "nohup php interfacegps.php >myscript.log 2>&1 &"

Как установить nohup php interfacegps.php в файле dockerfile? Мой код не работает.

1 Ответ

0 голосов
/ 27 февраля 2020

A Docker образ никогда не содержит запущенный процесс, он имеет только файловую систему и метаданные, необходимые для запуска контейнера. Когда контейнер запускается, он запускается независимо от его команды, и как только эта команда завершается, контейнер завершается. В контексте оболочки, если вы запустили команду, подобную показанной вами команде nohup, и вернули приглашение оболочки, это было бы сигналом для выхода контейнера Docker.

Возможно, вы захотите этого * Команда 1004 * должна быть CMD вашего образа (то, что запускается при запуске контейнера). Это должен быть процесс переднего плана, иначе контейнер выйдет. Вы не хотите пытаться перенаправить его журналы здесь, иначе они будут записаны в файл внутри контейнера, который трудно получить. Наконец, вам не нужна оболочка bash -c, потому что Docker автоматически предоставляет ее для линий CMD. Таким образом, вам остается только

CMD php interfacegps.php

Самый простой способ выполнить это - использовать опцию docker run -d для запуска контейнера в фоновом режиме, а затем использовать docker logs позже для просмотра журналов.

docker run --name interface-gps -d ... myimage
docker logs interface-gps

Если вы действительно хотите, вы можете запустить контейнер на переднем плане и захватить его вывод так же, как вы пытались в своей строке RUN.

nohup docker run --rm myimage >myscript.log 2>&1 &
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...