Как прикасаться к файлу, когда контейнер начинает использовать Dockerfile - PullRequest
0 голосов
/ 02 марта 2019

Мой Dockerfile

FROM ubuntu
WORKDIR .
RUN apt-get update
RUN apt-get install apache2 -y
COPY fffff.txt /var/www/html/
ENTRYPOINT ["sh", "-c", "touch /root/FILE1"]

Сборка Я использую

docker build -ti first:latest .

, но когда я пытаюсь запустить его, используя

docker run -it -d first:latest bash 

, он собирается выйти напрямуюКак я могу сделать этот контейнер постоянным?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Директивы ENTRYPOINT и CMD сообщают Docker, что делать, когда он запускает контейнер из образа.

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

На практике вы обычно хотите установить эти метаданные так, чтобы Docker запускал сервер или приложение, которое вы установили в образ, какпроцесс переднего плана.В случае Apache это будет выглядеть примерно так:

CMD ["apachectl", "start", "-DFOREGROUND"]

Получение интерактивной оболочки в контейнере может быть удобно для отладки, но обычно это не тот способ, которым вы хотите работать с контейнерами.docker run в идеале должен создать полнофункциональный сервер.

0 голосов
/ 02 марта 2019

Посмотрите, как ENTRYPOINT работает в Docker.Если вы передадите какую-либо команду (как CMD или как вы сделали с bash), она запустится, поэтому в вашем случае это будет:

"sh", "-c", "touch /root/FILE1" bash

, что абсолютно бессмысленно.

Если вы хотите создать файл внутри контейнера и запустить его как демон, сделайте это следующим образом:

Dockerfile :

FROM ubuntu

WORKDIR .
RUN apt-get update
RUN apt-get install apache2 -y

COPY fffff.txt /var/www/html/

RUN touch /root/myfile

Создайте его так жекак вы сделали, но запустите так:

docker run -it -d first:latest /bin/bash 

Осторожно, он будет запускать ваш контейнер как демон (флаг -d), поэтому он не перейдет в оболочку контейнера.

Если вы хотите подключиться к контейнеру демона, используйте docker attach <container_id> (или <container_name>)

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