如何编译文件后,我壳到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:/# 

如何编辑文件?

在评论中,没有默认的编辑器设置 – 奇怪 – $EDITOR envvariables是空的。 您可以通过以下方式login容器:

 docker exec -it <container> bash 

并运行:

 apt-get update apt-get install vim 

或者使用下面的Dockerfile:

 FROM confluent/postgres-bw:0.1 RUN ["apt-get", "update"] RUN ["apt-get", "install", "-y", "vim"] 

编辑

Docker镜像被剪裁到最低限度 – 所以没有编辑器安装在运输的容器中。 这就是为什么需要手动安装它。

如果你不想添加一个编辑器来做一些小的改变(例如,改变tomcatconfiguration),你可以

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

将其复制到本地计算机(到当前目录)。 然后用你最喜欢的编辑器在本地编辑文件,然后做一个

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

replace旧的文件。

如果安装了cat可以使用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

为了保持你的docker图像小,不要安装不必要的编辑器。 您可以通过ssh将文件从docker主机编辑到容器中:

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

我使用“docker运行”(不是“docker执行”),我在一个限制区域,我们不能安装编辑器。 但是我有一个docker主持人的编辑。 我的解决方法是:将一个卷从docker主机装载到容器( https://docs.docker.com/engine/reference/run/#/volume-shared-filesystems ),并在容器外编辑该文件。 它看起来像这样:

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

这主要是为了试验,稍后我会在构build图像时更改文件。

有时候你必须先用root运行容器

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

然后在容器中安装vim或其他东西

 apt-get install vim 

你也可以使用一个特殊的容器,它只包含你需要的命令:vim。 我select了python-vim 。 假设您要编辑的数据位于使用以下Dockerfile构build的数据容器中:

 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"] 

您将能够通过挂载将由您的数据容器(src_data)和python-vim容器共享的docker卷(src_volume)来编辑您的数据。

 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 

这样,你不会改变你的容器。 你只是使用一个特殊的容器来完成这项工作。

有点棘手,但在一个捏,你可以使用sedawk进行小编辑或删除文本。 当然,要小心你的正则expression式目标,并且要知道你可能是你的容器的root ,可能需要重新调整权限。

例如。 删除包含与正则expression式匹配的文本的完整行

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

(更多)