Вышел с док-кодом 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