Я успешно обработал контейнер 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:/#
Как мне редактировать файлы?
Dockerfile
apt-get install и включить и создать свой собственный контейнер? Контейнер Docker спроектирован именно так, а не по-вашему.Ответы:
Как и в комментариях, редактор по умолчанию не установлен - странно -
$EDITOR
переменная окружения пуста. Вы можете войти в контейнер с помощью:И запустить:
Или используйте следующий Dockerfile:
Изображения Docker поставляются обрезанными до минимума - поэтому в поставляемом контейнере не установлен редактор. Вот почему необходимо установить его вручную.
РЕДАКТИРОВАТЬ
Я также призываю вас прочитать мой пост на эту тему.
источник
docker exec -u 0 -it container_name bash
.vim-tiny
вместо этого, вероятно./var/lib/docker/
apt-get
не работал из-за проблемы с разрешением внутри контейнера, поэтому я попыталсяsed -i 's/texttobechanged/textwanted/g' filename
. Это сработало для меня.Если вы не хотите добавлять редактор только для того, чтобы внести несколько небольших изменений (например, изменить конфигурацию Tomcat), вы можете просто использовать:
который копирует его на ваш локальный компьютер (в ваш текущий каталог). Затем отредактируйте файл локально, используя ваш любимый редактор, а затем выполните
заменить старый файл.
источник
docker cp <container>:C:\inetpub\wwwroot\Web.config .
иdocker cp Web.config <container>:C:\inetpub\wwwroot\Web.config
.docker exec -u 0 -it mycontainer bash
), а затем выполнивchown
команду.Вы можете использовать,
cat
если он установлен, что, скорее всего, будет, если это не пустой контейнер. Это работает в крайнем случае, и хорошо, когда копирование + вставка в соответствующий редактор локально.cat
будет выводить каждую строку при получении новой строки. Не забудьте добавить новую строку для этой последней строки. Ctrl-C посылаетSIGINT
для кота, чтобы выйти изящно. Из комментариев вы видите, что вы также можете нажать ctrl-d, чтобы обозначить конец файла («больше нет ввода»).Другой вариант, например,
infilter
внедряет процесс в пространство имен контейнера с помощью некоторой магии ptrace: https://github.com/yadutaf/infilter.источник
ctrl+D
лучше чемctrl+C
.ctrl+D
отправляетEOF
. Вам не нужно добавлять дополнительный перевод строки в конце. С помощьюctrl+C
, если вы забудете добавить новую строку, вы потеряете последнюю строку!Чтобы ваши изображения Docker были маленькими, не устанавливайте ненужные редакторы. Вы можете редактировать файлы через SSH с хоста Docker в контейнер:
источник
vim scp://
vim.wikia . Также, чтобы получить IP-адрес вашего контейнера, вы можете использоватьsudo docker inspect <container_id> | grep "IPAddress"
vim scp://docker@172.17.0.17//data/gitea/conf/app.ini
так же, какvim scp://remoteuser@172.17.0.17//data/gitea/conf/app.ini
и оба они просто создают новый пустой файл.ssh
контейнер. См. Blog.softwaremill.com/… . Но вы обычно не хотите устанавливатьssh
в свой контейнер.Когда-нибудь вы должны сначала запустить контейнер с
root
:Затем в контейнере, чтобы установить Vim или что-то еще:
источник
Я использую «Docker Run» (не «Docker Exec»), и я нахожусь в запретной зоне, где мы не можем установить редактор. Но у меня есть редактор на хосте Docker.
Мой обходной путь: подключите том с хоста Docker к контейнеру ( https://docs.docker.com/engine/reference/run/#/volume-shared-filesystems ) и отредактируйте файл вне контейнера. Это выглядит так:
Это в основном для экспериментов, а позже я изменил файл при создании изображения.
источник
После того, как вы отправились в контейнер Docker, просто наберите:
источник
Вы можете открыть существующий файл с
и скопировать весь существующий текст в буфер обмена.
Затем удалите старый файл с
или переименуйте старый файл с помощью
Создать новый файл с
Затем вставьте весь текст, скопированный в буфер обмена, нажмите
Enter
и выйдите с сохранением, нажавctrl+z
. И вуаля нет необходимости устанавливать какие-либо редакторы.источник
Вы можете просто отредактировать свой файл на хосте и быстро скопировать его и запустить в контейнере. Вот мой однострочный ярлык для копирования и запуска файла Python:
источник
Для общих операций редактирования , я предпочитаю , чтобы установить
vi
( ВИМ-крошечное ), который использует только 1491 кБ илиnano
который использует 1707 кбайт .В другой руке
vim
используется 28,9 МБ .Мы должны помнить, что для того,
apt-get install
чтобы работать, мы должны сделать этоupdate
в первый раз, поэтому:Для запуска редактора в CLI нам нужно войти
vi
.источник
Если вы используете контейнер Windows и хотите изменить любой файл, вы можете легко получить и использовать Vim в консоли Powershell.
Чтобы перейти в контейнер Windows Docker с помощью PowerShell:
docker exec -it <name> powershell
Сначала установите менеджер пакетов Chocolatey
Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression;
Установить Vim
choco install vim
Обновить ОКРУЖАЮЩУЮ СРЕДУ Вы можете просто
exit
и скорлупить обратно в контейнерПерейти к расположению файла и Vim его
vim file.txt
источник
Это немного странно, но в крайнем случае вы можете использовать
sed
илиawk
сделать небольшие правки или удалить текст. Конечно, будьте осторожны с вашими регулярными выражениями и помните, что вы, скорее всего, находитесьroot
в своем контейнере и, возможно, придется изменить настройки разрешений.Например, удаление полной строки, содержащей текст, соответствующий регулярному выражению:
(Больше)
источник
Простой способ отредактировать несколько строк:
источник
См. Вопрос о переполнении стека в месте редактирования файла
Было бы хорошим вариантом здесь, если:
cat
.Установка Vim запрещена или занимает слишком много времени. МОЯ ситуация с использованием MySQL 5.7 изображения , когда я хочу , чтобы изменить
my.cnf
файл, не существуетvim
,vi
и Вьет установку занимает слишком много времени (Китай Great Firewall).sed
представлен на изображении, и это довольно просто. Мое использование какsed -i /s/testtobechanged/textwanted/g filename
Используйте
man sed
или ищите другие учебники для более сложного использования.источник
Вы можете использовать,
cat
если установлен, с>
символом. Вот манипуляция:Теперь вы можете увидеть результат с помощью команды
источник
Вы также можете использовать специальный контейнер, который будет содержать только нужную вам команду: Vim. Я выбрал python-vim . Предполагается, что данные, которые вы хотите редактировать, находятся в контейнере данных, построенном со следующим Dockerfile:
Вы сможете редактировать свои данные, подключив том Docker (src_volume), который будет использоваться вашим контейнером данных (src_data) и контейнером python-vim.
Таким образом, вы не меняете свои контейнеры. Вы просто используете специальный контейнер для этой работы.
источник