Контейнер Docker запускается и сразу выходит - PullRequest
0 голосов
/ 06 ноября 2019

Я пытался создать dockerfile, который создает веб-сервер, который может обслуживать html и php страницы.

Мне требуется сборка изображений, которая при запуске выполняет сценарий оболочки при запуске один раз. ,

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

Мне требуется, чтобы это было закодировано в файле docker при запуске образанапрямую из GCP на виртуальной машине, использующей оптимизированную для контейнера ОС, в которой он запускает образ докера при запуске виртуальной машины (поэтому у меня нет возможности использовать команду docker run -c).

Это моя текущая попытка.

FROM php:7.2-apache
COPY / /var/www/html/
EXPOSE 80

ADD start_container.sh /usr/bin/start_container
RUN chmod +x /usr/bin/start_container

ENTRYPOINT ["start_container"]

Я также пробовал это с

ENTRYPOINT ["docker-php-entrypoint && start_container"]; sleep infinity

и

CMD ["docker-php-entrypoint"]

На данный моментbash-скрипт просто создает html-файл.

#! /usr/bin/env bash

cat>/var/www/html/indextest.html

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Вам не нужно переопределять CMD или entrypoint как приложение запуска базового образа из CMD, поэтому ваш контейнер умирает, как только он выполняет ваш скрипт bash, которыйпросто создает index.html. жизнь контейнера - это жизнь точки входа, поэтому точка входа должна запускать длительный процесс, который поддерживает их работу.

#!/usr/bin/env bash

echo "hello world" > /var/www/html/indextest.html

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

Обходной путь к вашему делу

#!/usr/bin/env bash
echo "hello" > /var/www/html/index.html
exec apache2-foreground

Dockerfile

FROM php:7.2-apache
EXPOSE 80
ADD start_container.sh /usr/bin/start_container
RUN chmod +x /usr/bin/start_container
ENTRYPOINT ["start_container"]

затем

docker build -t test . && docker run -dit -p 8090:80 --rm abc && sleep 2 &&  curl localhost:8090

Вы увидите привет мир из контейнера в терминале.

но лучше указать index.html во время сборки докера, и тогда вам не нужно переопределять точку входа или CMD.

FROM php:7.2-apache
RUN echo "hello world" > /var/www/html/index.html
EXPOSE 80
0 голосов
/ 06 ноября 2019

Если под «выполнением» вы подразумеваете приглашение bash, вы можете сделать следующее:

docker build -t [NAME]
docker run -it [NAME] /bin/bash

Это предложит вам указать контейнеры bash. Чтобы проверить, был ли построен контейнер, вы можете сделать docker ps -a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...