Как отредактировать файл после оболочки в контейнер Docker?




6 Answers

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

docker cp <container>:/path/to/file.ext .

который копирует его на ваш локальный компьютер (в ваш текущий каталог). Затем отредактируйте файл локально, используя ваш любимый редактор, а затем выполните

docker cp file.ext <container>:/path/to/file.ext

для замены старого файла.

docker

Я успешно обстрелял контейнер Docker, используя

docker exec -i -t 69f1711a205e bash

Теперь мне нужно отредактировать файл, и у меня нет редакторов внутри:

root@69f1711a205e:/# nano
bash: nano: command not found
root@69f1711a205e:/# pico
bash: pico: command not found
root@69f1711a205e:/# vi
bash: vi: command not found
root@69f1711a205e:/# vim
bash: vim: command not found
root@69f1711a205e:/# emacs
bash: emacs: command not found
root@69f1711a205e:/#

Как редактировать файлы?




Чтобы ваши изображения Docker были небольшими, не устанавливайте ненужные редакторы. Вы можете редактировать файлы через SSH с хоста Docker в контейнере:

vim scp://remoteuser@containerip//path/to/document



Я использую «docker run» (не «docker exec»), и я в ограниченной зоне, где мы не можем установить редактор. Но у меня есть редактор на хосте Docker.

Мое обходное решение: Свяжите монтировку тома с хостом Docker в контейнер ( https://docs.docker.com/engine/reference/run/#/volume-shared-filesystems ) и отредактируйте файл за пределами контейнера. Это выглядит так:

docker run -v /outside/dir:/container/dir

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




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

Например, удаление полной строки, содержащей текст, соответствующий регулярному выражению:

awk '!/targetText/' file.txt > temp && mv temp file.txt

(More)




Простым способом редактирования нескольких строк будет:

echo "deb http://deb.debian.org/debian stretch main" > sources.list



См. Файл редактирования sed для переполнения стека

Это было бы неплохо, если бы:

  1. Чтобы изменить большой файл, невозможно использовать cat .
  2. Установка Vim запрещена или занимает слишком много времени. В моей ситуации используется образ MySQL 5.7, когда я хочу изменить файл my.cnf , нет установки vim , vi , а установка Vim занимает слишком много времени (China Great Firewall). sed представлен на изображении, и это довольно просто. Мое использование

    sed -i /s/testtobechanged/textwanted/g filename

    Используйте man sed или найдите другие учебники для более сложного использования.






Related


Tags

docker