Как сделать так, чтобы контейнер docker работал вечно - PullRequest
1 голос
/ 19 марта 2020

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

Проблема в том, что после того, как я собрал и запустил образ, контейнер немедленно остановился (потому что он завершился).

Как я могу поддерживать постоянную работу контейнера? Насколько я понимаю, после того, как люди извлекли и запустили мой образ, они могут запустить файл python, запустив «python file. python».

мой Dockerfile выглядит следующим образом (может быть неверным. Я все еще учусь):

FROM python:3-alpine
ADD . /app
WORKDIR /app
RUN pip install configparser

Ответы [ 3 ]

2 голосов
/ 19 марта 2020

С КАК ДЕРЖАТЬ DOCKER КОНТЕЙНЕРЫ РАБОТАЮТ , мы можем знать, что контейнеры docker при запуске в отдельном режиме (наиболее распространенная опция -d) предназначены для отключения сразу после команда начальной точки входа (программа, которая должна запускаться, когда контейнер построен из образа) больше не работает на переднем плане. Таким образом, чтобы docker контейнер работал, даже внутренняя программа сделала

  • , просто добавьте CMD tail -f /dev/null в качестве последней строки в dockerfile

Что более важно, это то, что мы должны понимать для чего предназначен docker и как его правильно использовать. Попробуйте использовать docker, так как основа среды для приложений на хост-компьютере не является хорошим выбором, docker предназначена для запуска приложений, не зависящих от среды. Приложения должны быть помещены в docker образ с помощью docker build и запускаться в контейнере docker во время выполнения.

1 голос
/ 19 марта 2020

В вашем Dockerfile отсутствует CMD. Это ничего не делает прямо сейчас.

Вам необходимо добавить следующее;

## Run the script
CMD [ "python", "-u", "./your-script.py"]

Я добавляю -u, чтобы Python работал в небуферизованном режиме вывода. Если вы этого не сделаете, вы, вероятно, не увидите вывод из вашего скрипта.

Если вы сейчас начнете прикреплять свой контейнер, вы можете просмотреть его вывод

docker run your-container

Вы также можете запустить его отдельно и прикрепить позже.

docker run -d --name container-name your-container

Именование вашего контейнера значительно упрощает управление его сроком службы.

Подключите к выходу, используя

docker logs container-name 

Или с взаимодействием, используя

docker attach container-name
1 голос
/ 19 марта 2020

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

docker run -it <your-image> bash
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...