Подтвердить что ты не робот

Как редактировать файлы в остановленном/не запущенном контейнере докеров

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

  • либо я полностью ленив, а устанавливаю nano и редактирую непосредственно в контейнере или

  • I docker cp файл из контейнера, отредактируйте его, скопируйте и перезапустите контейнер

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

Теперь я часто нарушаю стартовую программу контейнера, которая в случаях прерывания является либо node script, либо веб-сервером python script, как правило, сбой от синтаксических ошибок.

Есть ли способ сохранить эти контейнеры? Так как они не запускаются, я не могу докеры выполнять их, и, таким образом, они потеряны для меня. Затем я иду по маршруту rm/rmi/build/run после исправления файла-нарушителя в вводе сборки.

Как я могу либо редактировать файлы в остановленном контейнере, либо использовать их или запускать оболочку в остановленном контейнере - все, что позволяет мне исправить этот контейнер?

(Кажется, это похоже на работу на удаленном компьютере и нарушение сетевой конфигурации - соединение теряется "навсегда" таким образом, и нужно использовать резервную копию, если это существует.)

Как редактировать файлы контейнера Docker с хоста? выглядит актуальным, но устаревшим.

4b9b3361

Ответ 1

Отвечая на мой собственный вопрос... все еще надеясь на лучший ответ от более узнаваемого человека!

Есть 2 возможности.

1) Редактирование файловой системы непосредственно на хосте. Это несколько опасно и имеет шанс полностью разбить контейнер, возможно, другие данные в зависимости от того, что пойдет не так.

2) Изменение запуска script на что-то, что никогда не терпит неудачу, как запуск bash, выполнение исправлений/исправлений, а затем снова изменение программы запуска на нужную (например, node или что бы это было раньше).

Подробнее:

1) Используя

docker ps

чтобы найти запущенные контейнеры или

docker ps -a

чтобы найти все контейнеры (включая остановленные) и

docker inspect (containername)

найдите "Id", одно из первых значений.

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

Перейдите к

/var/lib/docker/aufs/diff/9bc343a9..(long container id)/

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

Опять же, я бы не рекомендовал этого.

2) Как описано в fooobar.com/info/79785/..., вы можете найти конфигурацию json config.json по пути, например

/var/lib/docker/containers/9bc343a99..(long container id)/config.json

Там вы можете изменить args из e. г. "nodejs app.js" - "/bin/ bash". Теперь перезапустите службу докеров и запустите контейнер (вы должны увидеть, что он теперь правильно запускается). Вы должны использовать

docker start -i (containername)

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

docker exec -ti (containername) /bin/bash

Кроме того, docker cp весьма полезен для копирования файлов, которые редактировались вне контейнера.

Кроме того, следует только вернуться к этим мерам, если контейнер все-таки "потерян" в любом случае, поэтому любое изменение будет улучшением.