Как повторно войти в приглашение Docker Container после выхода - PullRequest
0 голосов
/ 25 октября 2018

Я запускаю Docker, следуя этой процедуре :

    $ sudo service docker start
    $ docker pull epgg/eg
    $ docker run -p 8081:80 --name eg -it epgg/eg bash
    root@35f54d7d290f:~#

Обратите внимание, что на последнем шаге создается приглашение root root@35f54d7d290f:~#.Когда я делаю

 root@35f54d7d290f:~# exit
 exit

Docker завершает работу, и Apache внутри контейнера не работает.Как я могу безопасно покинуть контейнер и как я могу снова войти в приглашение Docker Container.

Ответы [ 2 ]

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

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

  1. Вы можете использовать сокращение -d при запуске контейнера для отсоединенияконтейнер из терминала, например:

    docker run -d -it --name {container_name} {image}:{tag}
    

    Но это не гарантирует, что какой-либо процесс будет запущен в фоновом режиме, поэтому даже в этом случае контейнер остановится, когда процесс завершится.

  2. Для активного запуска сервера apache в фоновом режиме необходимо использовать флаг -DFOREGROUND при запуске контейнера:

    /usr/sbin/httpd -DFOREGROUND     (for centOS/RHEL) 
    

    Это запустит ваш apacheслужба в фоновом режиме.

  3. В других случаях, чтобы ваши службы работали в автономном режиме, просто передайте команду /bin/bash, это будет поддерживать оболочку bash в фоновом режиме.

    docker run -d -it --name {container_name} {image}:{tag} /bin/bash
    

В любом случае, чтобы выйти из работающего контейнера, не выходя из контейнера и процесса, просто нажмите: Ctrl + P + Q .

Чтобы прикрепить контейнерснова к терминалу используйте это:

docker attach {container_name}
0 голосов
/ 25 октября 2018

Когда вы запускаете следующую команду, она выполняет 2 операции.

$ docker run -p 8081:80 --name eg -it epgg/eg bash
  • Создает контейнер с именем например,
  • У него только одна цель / процесс bash , который вы переопределили с помощью параметра cmd.
    • Это означает, что когда оболочка bash завершена / завершена / выход * У контейнера нет цели запуска, и, следовательно, ваш докер-контейнер также войдет в остановленный этап.

В идеале вы должны создать контейнер для запуска apache-сервера в качестве основного процесса (либо по умолчанию для точки входа, либо для cmd).

$ docker run -p 8081:80 --name eg -d epgg/eg

И затем использоватьследующую команду вы можете ввести внутри работающего контейнера.

$ docker exec -it eg bash

здесь имя вашего контейнера, например, (обратите внимание, поскольку у вас уже есть контейнер с именем "например", вы можете сначала удалить его)

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