我成功地shell到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:/#

如何编辑文件?


当前回答

如果安装了cat,您可以使用它,如果它不是一个裸/原始容器,则很可能是这种情况。它的工作在紧要关头,ok时复制+粘贴到一个适当的编辑器本地。

cat > file
# 1. type in your content
# 2. leave a newline at end of file
# 3. ctrl-c / (better: ctrl-d)
cat file

Cat将在接收换行符时输出每一行。确保为最后一行添加换行符。ctrl-c发送一个SIGINT让cat优雅地退出。从注释中您可以看到,您还可以按ctrl-d来表示文件结束(“没有更多的输入即将到来”)。

另一种选择是类似于infilter的东西,它使用一些ptrace魔法将进程注入容器名称空间:https://github.com/yadutaf/infilter

其他回答

shell到Docker容器后,只需输入:

apt-get update
apt-get install nano

你可以在主机上编辑你的文件,并快速复制到容器中运行。下面是复制并运行Python文件的一行快捷方式:

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

你可以安装nano

yum install nano

确保在尝试安装编辑器之前更新容器。

apt-get update
apt-get install nano vi

您还可以使用一个特殊的容器,它只包含您需要的命令:Vim。我选择了python-vim。它假设你想要编辑的数据在一个用Dockerfile构建的数据容器中:

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

这样,就不需要更改容器。你只需要用一个特殊的容器来做这项工作。