Контейнер Docker останавливается после «запуска Docker» - PullRequest
0 голосов
/ 23 октября 2018

Я довольно новичок в Docker.У меня есть длинный Dockerfile, который я унаследовал от предыдущего разработчика, в котором много ошибок, и я пытаюсь вернуть его в рабочее состояние.Я закомментировал большую часть файла, за исключением только первой строки:

FROM ubuntu:14.04

Я сделал следующее:

  1. docker build -t pm ., чтобы построить образ - это работает, потому что я могусм. изображение, когда я выполняю docker images
  2. docker run <image-id> возвращается без ошибок или каких-либо сообщений.Теперь я ожидаю, что контейнер будет создан из образа и запущен.Но когда я делаю docker ps -a, он показывает, что контейнер завершен:
CONTAINER ID        IMAGE               COMMAND             CREATED    STATUS                          PORTS               NAMES 

b05f9727f516 f216cfb59484 "/ bin / bash" Примерно минуту назад Выход (0) Примерно минуту назад
lucid_shirley

Не уверен, почему я не могу получить работающий контейнер и почему он продолжает останавливаться после команды docker run.

выполнение docker logs <container_id> ничего не отображает - просто возвращается без вывода.

Ответы [ 5 ]

0 голосов
/ 24 октября 2018

Контейнер Docker распределен по категориям следующим образом.

  1. Задача: при запуске контейнера он начинает обработку и завершает процесс, а затем завершается.

  2. Фоновый контейнер: он будет ожидать некоторого запроса.

Поскольку вы не предоставили свой файл докера, поэтому я предполагаю, что у вас есть только один оператор.

FROM ubuntu:14.04

вашинструкция build создать образ с именем pm.

  1. Теперь вы запустите docker run pm. Он запустит контейнер и остановится, так как вы не указали точку входа.

  2. Теперь попробуйте это Это одна командная строка или терминал.

    docker run -it pm /bin/bash
    

    Откройте другой терминал или командную строку.

    docker ps ( Now you will see there is one container).
    
  3. Если вы хотите увидеть контейнер, который постоянно работает, используйте следующее изображение.(Это только пример)

    docker run -d -p 8099:80 nginx 
    

Над строкой запускается один контейнер с изображением Nginx, и когда вы открываете браузер http://localhost:8099, вы можете увидеть ответ.

0 голосов
/ 24 октября 2018

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

docker run <imageid> echo hi, он вернет вывод, значит, с вашим контейнером все в порядке.

0 голосов
/ 24 октября 2018

Контейнеры Docker тесно связаны с процессом, который они выполняют.Этот процесс определяется частью «CMD» в Dockerfile.Этот процесс имеет PID "1".Если вы убьете его, ваш контейнер будет убит.Если у вас его нет, ваш контейнер немедленно остановится.В вашем случае вы должны «переопределить» свой CMD.Вы можете сделать это с помощью простой команды: «Docker run -it ubuntu: 18.04 bash».«-it» является обязательным, поскольку позволяет подключать stdin к вашему контейнеру.

Веселитесь с докером.

0 голосов
/ 24 октября 2018

попробуйте docker run -it <image> /bin/bash запустить оболочку внутри контейнера.

Это ничего не даст для вас, но покажет вам, что происходит: как только вы выйдете из оболочки, она будеттоже выйдите из контейнера.

Ваш контейнер в основном ничего не делает: у него есть образ Ubuntu, но нет команды ENTRYPOINT или CMD для запуска чего-то. Контейнеры эфемерны при запуске: они запускаютсяодна команда и выход после ее завершения.

0 голосов
/ 23 октября 2018

Ваше изображение Docker фактически ничего не делает, контейнер останавливается, когда завершает свою работу.Поскольку здесь не запущен процесс переднего плана, он будет запущен, а затем немедленно остановлен.Чтобы убедиться, что у вашего контейнера нет проблем, попробуйте поместить приведенный ниже код в docker-compose.yml (в той же папке, что и Dockerfile) и запустите docker-compose up, теперь вы увидите, что ваш контейнер работает без выхода.

version: '3'
services:
  my-service:
    build: .
    tty: true    

Пожалуйста, посмотрите здесь Официальное руководство по Docker , которое поможет вам понять, как работать с Docker.

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