🐳 Error: can only create exec sessions on running containers

Как исправить ошибку

by itisgood

Сообщение об ошибке “Error: can only create exec sessions on running containers: container state improper” обычно возникает, когда вы пытаетесь выполнить команду внутри контейнера Docker с помощью docker exec, но контейнер находится не в том состоянии, чтобы принимать команды.

Обычно это означает, что контейнер не запущен.

# docker run -td --name test_image custom-docker-releases.repo3.cci.dummy.net/build_centos8_rocky:latest
312b0fc5642a7670a2c3ee9561880f62320dc4587ee7683fefbe3237af978a10

# docker exec -ti test_image bash
Error: can only create exec sessions on running containers: container state improper

Понимание состояния контейнеров Docker

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

Вы можете проверить состояние контейнера с помощью таких команд, как docker ps для запущенных контейнеров и docker ps -a для всех контейнеров, включая незапущенные.

Вот подробное объяснение каждого состояния:

  • Created: Контейнер был создан, но не запущен. Он инициализирован и готов к работе, но пока не выполняет никаких процессов.
  • Running: Контейнер активно работает. Его основной процесс работает, и он способен выполнять команды и задачи.
  • Paused: Процессы контейнера временно приостановлены. Он находится в приостановленном состоянии, экономя ресурсы без полной остановки.
  • Exited: Контейнер прекратил работу. Это происходит после завершения его основного процесса или если контейнер остановлен вручную.
  • Restarting: Контейнер находится в процессе остановки и последующего запуска, обычно запускаемого политикой перезапуска контейнера.
  • Dead: контейнер находится в нефункциональном состоянии, часто из-за системных ошибок или проблем в демоне Docker, которые не позволяют управлять им должным образом.
  • Removing: Контейнер находится в процессе удаления из системы. Это переходное состояние в процессе удаления.

Распространенные причины возникновения ошибки

Если вы столкнулись с ошибкой “Error: can only create exec sessions on running containers: container state improper”, существует несколько распространенных причин, по которым может возникнуть эта проблема.

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

Как решить проблему “Ошибка: можно создавать сеансы exec только в запущенных контейнерах”

  • Проверьте состояние контейнера: Сначала проверьте статус контейнера с помощью docker ps -a. Найдите нужный контейнер и проверьте его состояние.
  • Запустите контейнер: Если контейнер не запущен, запустите его с помощью команды docker start [имя_контейнера_или_имя_имя_контейнера].
  • Снимите контейнер с паузы: Если контейнер приостановлен, снимите его с паузы с помощью команды docker unpause [имя_контейнера_или_имя_имя_имя_имя_имя_имени].
  • Продолжить работу контейнера: Задайте точку входа и укажите пользовательскую команду для поддержания его работы [docker run –entrypoint /bin/bash container_name_or_id -c “sleep 999999”].

В моем случае я установил пользовательскую точку входа и добавил команду sleep для поддержания контейнера в рабочем состоянии:

docker run --entrypoint /bin/bash  custom-docker-releases.repo3.cci.dummy.net/build_centos8_rocky:latest -c "sleep 999999"

Затем проверьте, запущен ли процесс docker.

]# docker ps
CONTAINER ID  IMAGE                                                                   COMMAND               CREATED      STATUS          PORTS                                                            NAMES
....
d7bb60af1cfc  custom-docker-releases.repo3.cci.dummy.net/build_centos8_rocky:latest  -c sleep 999999       5 hours ago  Up 5 hours ago                                                                   nice_stonebraker

Затем подключитесь к образу контейнера

~]# docker exec -ti d7bb60af1cfc bash
[root@d7bb60af1cfc /]#

Как только вы закончите, завершите процесс

~]# docker kill d7bb60af1cfc

Заключение

В статье представлено полное руководство по устранению ошибки “Error: can only create exec sessions on running containers: container state improper”, часто встречающейся в Docker.

Эта ошибка обычно возникает при попытке выполнить команду в контейнере Docker, который не находится в “работающем” состоянии.

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

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

Неправильные идентификаторы контейнеров или проблемы с демоном Docker также могут вызывать эту проблему.

см. также:

You may also like

Leave a Comment