Вышел с док-кодом 0

Я пытаюсь запустить контейнер, используя сервисы docker-compose. Но, к сожалению, контейнер вышел из кода 0. Контейнеры создаются благодаря хранилищу из архива .tar.gz. Этот архив представляет собой Centos VM.

Я хочу создать 6 контейнеров из одного и того же архива. Вместо того, чтобы вводить команду docker 6 раз, я хотел бы создать файл docker-compose.yml, где я могу суммировать их команду и тег.

Я начал писать файл docker-compose.yml только для создания одного контейнера.

Вот мой docker-compose.yml:

version: '2'
services:
  dvpt:
   image: compose:test.1
   container_name: cubop1
   command: mkdir /root/essai/
   tty: true

Не обращайте внимания на команду, поскольку я должен просто указать ее.

Итак, мой вопрос: почему контейнер выходит из? Есть ли еще одно решение для сборки этого контейнера одновременно?

Спасибо за ваши ответы.

Ответ 1

Ответ на самом деле является первым комментарием. Я немного объясню Мигель.

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

При таком понимании мы можем сделать предположение о том, что происходит в вашем случае. При запуске службы dvpt выполняется команда mkdir /root/essai/. Эта команда создает папку, а затем завершает работу. В этот момент контейнер Docker останавливается, потому что процесс завершен (состояние 0, указывающее, что mkdir завершено без ошибок).

Ответ 2

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

Это очень хак. Я все еще ищу лучшее решение.

Изображение Zend Server делает что-то вроде этого. В их .sh script у них есть заключительная команда:

exec /usr/local/bin/nothing

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

EDIT: Вы также можете завершить свой файл с помощью /bin/bash, который начинает новый процесс терминала в контейнере и не позволяет ему закрыться.

Ответ 3

Вы можете закончить командой как tail -f/dev/null

Это часто работает в моем docker-compose.yml с

command: tail -f/dev/null

И это легко увидеть, как я продолжаю контейнер работать.

docker ps