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




6 Answers

Как и в комментариях, набор редакторов по умолчанию не задан - странно - $EDITOR среды $EDITOR пуста. Вы можете войти в контейнер с:

docker exec -it <container> bash

И запустите:

apt-get update
apt-get install vim

Или используйте следующий файл Docker:

FROM  confluent/postgres-bw:0.1

RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "vim"]

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

контейнера автозапуск

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

docker exec -i -t 69f1711a205e bash

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

[email protected]:/# nano
bash: nano: command not found
[email protected]:/# pico
bash: pico: command not found
[email protected]:/# vi
bash: vi: command not found
[email protected]:/# vim
bash: vim: command not found
[email protected]:/# emacs
bash: emacs: command not found
[email protected]:/#

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




Вы можете использовать cat если он установлен, что, скорее всего, будет иметь место, если это не голый / необработанный контейнер. Он работает в крайнем случае и хорошо, когда копирование + вставка в соответствующий редактор локально.

cat > file
# 1. type in your content
# 2. leave a newline at end of file
# 3. ctrl-c
cat file

cat будет выводить каждую строку при получении новой строки. Обязательно добавьте новую строку для этой последней строки. ctrl-c отправляет SIGINT для кошки, чтобы выйти изящно.

Другой вариант - это нечто вроде infilter которое вводит процесс в пространство имен контейнеров с помощью некоторой магии ptrace: https://github.com/yadutaf/infilter




Когда-нибудь сначала вы должны запустить контейнер с root :

docker exec -ti --user root <container-id> /bin/bash

Затем в контейнере установите Vim или что-то еще:

apt-get install vim



Вы можете просто отредактировать свой файл на хосте и быстро скопировать его и запустить в контейнере. Вот мой однострочный ярлык для копирования и запуска файла Python:

docker cp main.py my-container:/data/scripts/ ; docker exec -it my-container python /data/scripts/main.py



Вы также можете использовать специальный контейнер, который будет содержать только нужную команду: Vim. Я выбрал python-vim . Предполагается, что данные, которые вы хотите редактировать, находятся в контейнере данных, построенном со следующим файлом Docker:

FROM debian:jessie
ENV MY_USER_PASS my_user_pass
RUN groupadd --gid 1001 my_user
RUN useradd -ms /bin/bash --home /home/my_user \
            -p $(echo "print crypt("${MY_USER_PASS:-password}", "salt")" | perl) \
            --uid 1001 --gid 1001 my_user
ADD src /home/my_user/src
RUN chown -R my_user:my_user /home/my_user/src
RUN chmod u+x /home/my_user/src
CMD ["true"]

Вы сможете редактировать свои данные, установив том Docker (src_volume), который будет использоваться вашим контейнером данных (src_data) и контейнером python-vim.

docker volume create --name src_volume
docker build -t src_data .
docker run -d -v src_volume:/home/my_user/src --name src_data_1 src_data
docker run --rm -it -v src_volume:/src fedeg/python-vim:latest

Таким образом, вы не меняете свои контейнеры. Вы просто используете специальный контейнер для этой работы.




После того, как вы обстреляли контейнер Docker, просто введите:

apt-get update
apt-get install nano



Related


Tags

docker