@alexanderbulatov
Fullstack разработчик

Как сделать так, чтобы контейнер Docker был запущен постоянно?

Доброго времени суток!

Ситуация такова.

Написал Dockerfile со следующим содержимым:
FROM php:apache
COPY . /app
WORKDIR /app
ENTRYPOINT [ "php", "./index.php" ]
CMD [ "apache2ctl", "-D FOREGROUND" ]


И поместил в директорию с этим файлом файл index.php, просто с командой phpinfo:
<?php
phpinfo();


Запустил через консоль построение данного образа:
docker build -t test-php .

Затем запустил контейнер
docker run -d -p 6000:6000 --name test-php test-php


И затем, хотел бы открыть в браузере страницу localhost:6000, но страница не отображается. Я только его изучаю (Docker) и хотел бы понять как запустить правильно контейнер, чтобы он постоянно как бы был включён и я мог открыть страницу.

Буду признателен за любую мысль по этому поводу или указание куда смотреть нужно.
  • Вопрос задан
  • 345 просмотров
Решения вопроса 1
@alexanderbulatov Автор вопроса
Fullstack разработчик
Решение оказалось таким.

Создать следующую структуру файлов:
Директория public-html с единственным файлом index.php
Файл Dockerfile

Cодержимое Dockerfile:
FROM php:apache
COPY ./public-html/ /var/www/html/


Содержимое index.php:
<?php

phpinfo();


И запустить команды в консоли:
docker build -t test-php . && docker run -d -P --name test-php test-php


Просто директория по умолчанию в родительском образе, где должен быть входной скрипт, пуста. Решение просто поместить свой входной скрипт в эту директорию.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Вот этой командой вы создали контейнер и запустили одновременно.
docker run -d -p 6000:6000 --name test-php test-php
Подозреваю, что вы насоздавали уже кучу контейнеров. Команда запускается только один раз.
Вот эта команда запустит уже созданный контейнер и всё - он работает и работает постоянно, пока его не остановить.
docker start test-php
Дальше нам нужно войти в контейнер, чтобы настроить его.
docker exec -it test-php bin/bash
Тут у вас не запущен php, нужно было бы по-хорошему добавить в билд автостарт . Если php, то я работаю с nginx, вам нужен апачи и mysql я тоже сюда же вношу, у меня выглядит так, вам немного исправить. Опять же я настраиваю свой докер из под Убунты и не знаю какой образ идет с php:apache, возможно я в корне не прав.
Это автостарт, его в конце докер-файла прописать:
RUN touch /start
RUN chmod +x /start
RUN echo '#!/bin/bash' >> /start
RUN echo "service nginx start" >> /start
RUN echo "service mysql start" >> /start
RUN echo "service php7.4-fpm start" >> /start


Можно просто запустить php командой service php7.4-fpm start если у вас 7.4 версия, как в обычной системе, если я правильно всё понимаю. Я не знаю, что у вас за образ, вот в чем дело, не работал никогда с таким, я писал для убунты, команды для нее собственно.
Ответ написан
@Tiasar
Web Developer
Контейнер живет ровно столько сколько жив процесс запущенный в нем командой ENTRYPOINT [ "php", "./index.php" ], как только Ваш скрипт index.php завершает работу контейнер останавливается.
Какую задачу Вы хотите решить? От этого зависит как сделать правильно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 140 000 до 180 000 ₽
Getman & Co Санкт-Петербург
от 80 000 до 150 000 ₽
ДВИЖ Москва
от 120 000 до 200 000 ₽