我使用成功炮击了Docker容器
docker exec -i -t 69f1711a205e bash
Run Code Online (Sandbox Code Playgroud)
现在我需要编辑文件,里面没有任何编辑器:
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:/#
Run Code Online (Sandbox Code Playgroud)
如何编辑文件?
Opa*_*pal 648
在注释中,没有默认的编辑器设置 - 奇怪 - $EDITOR
环境变量是空的.您可以使用以下命令登录容器:
docker exec -it <container> bash
Run Code Online (Sandbox Code Playgroud)
并运行:
apt-get update
apt-get install vim
Run Code Online (Sandbox Code Playgroud)
或者使用以下Dockerfile:
FROM confluent/postgres-bw:0.1
RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "vim"]
Run Code Online (Sandbox Code Playgroud)
Docker镜像被传送到最低限度 - 因此没有与装运容器一起安装编辑器.这就是为什么需要手动安装它的原因.
编辑
我也鼓励你阅读关于这个主题的帖子.
hko*_*ong 373
如果您不想仅仅为了进行一些小的更改而添加编辑器(例如,更改Tomcat配置),您可以使用:
docker cp <container>:/path/to/file.ext .
Run Code Online (Sandbox Code Playgroud)
将其复制到本地计算机(到当前目录).然后使用您喜欢的编辑器在本地编辑该文件,然后执行
docker cp file.ext <container>:/path/to/file.ext
Run Code Online (Sandbox Code Playgroud)
替换旧文件.
小智 79
您可以使用cat
它是否已安装,如果它不是裸/原始容器,则很可能就是这种情况.它可以在紧凑的情况下工作,在本地复制+粘贴到适当的编辑器时可以.
cat > file
# 1. type in your content
# 2. leave a newline at end of file
# 3. ctrl-c / (better: ctrl-d)
cat file
Run Code Online (Sandbox Code Playgroud)
cat
将在接收换行时输出每一行.确保为最后一行添加换行符.ctrl-c发送SIGINT
for cat以优雅地退出.
另一种选择是infilter
使用一些ptrace魔法将进程注入容器命名空间:https://github.com/yadutaf/infilter
Mat*_*hew 51
要使Docker镜像保持较小,请不要安装不必要的编辑器.您可以通过SSH从Docker主机编辑文件到容器:
vim scp://remoteuser@containerip//path/to/document
Run Code Online (Sandbox Code Playgroud)
sim*_*eco 18
对于常见的编辑操作,我更喜欢安装vi
( vim-tiny ),它只使用1491 kB或nano
使用1707 kB。
另一方面vim
使用28.9 MB。
我们必须记住,为了apt-get install
工作,我们必须做update
第一次,所以:
apt-get update
apt-get install vim-tiny
Run Code Online (Sandbox Code Playgroud)
要在CLI 中启动编辑器,我们需要输入vi
.
小智 16
您可以打开现有文件
cat filename.extension
Run Code Online (Sandbox Code Playgroud)
并复制剪贴板上的所有现有文本。
然后删除旧文件
rm filename.extension
Run Code Online (Sandbox Code Playgroud)
或重命名旧文件
mv old-filename.extension new-filename.extension
Run Code Online (Sandbox Code Playgroud)
创建新文件
cat > new-file.extension
Run Code Online (Sandbox Code Playgroud)
然后粘贴所有复制到剪贴板上的文本,按 并按Enter
保存退出ctrl+z
。瞧,无需安装任何类型的编辑器。
小智 15
cat
如果已安装,您可以使用>
字符。这是操作:
cat > file_to_edit
#1 Write or Paste you text
#2 don't forget to leave a blank line at the end of file
#3 Ctrl + C to apply configuration
Run Code Online (Sandbox Code Playgroud)
现在您可以使用命令查看结果
cat file
Run Code Online (Sandbox Code Playgroud)
小智 13
有时您必须先运行容器root
:
docker exec -ti --user root <container-id> /bin/bash
Run Code Online (Sandbox Code Playgroud)
然后在容器中安装Vim或其他东西:
apt-get install vim
Run Code Online (Sandbox Code Playgroud)
我使用"docker run"(而不是"docker exec"),我在一个禁区,我们无法安装编辑器.但是我在Docker主机上有一个编辑器.
我的解决方法是:将一个卷从Docker主机绑定到容器(https://docs.docker.com/engine/reference/run/#/volume-shared-filesystems),然后在容器外编辑该文件.它看起来像这样:
docker run -v /outside/dir:/container/dir
Run Code Online (Sandbox Code Playgroud)
这主要用于实验,后来我在构建图像时更改了文件.
您可以在主机上编辑文件并快速将其复制到容器内并在其中运行.这是我复制和运行Python文件的单行快捷方式:
docker cp main.py my-container:/data/scripts/ ; docker exec -it my-container python /data/scripts/main.py
Run Code Online (Sandbox Code Playgroud)
请参阅堆栈溢出问题 sed edit file in place
如果满足以下条件,这将是一个不错的选择:
cat
.不允许安装 Vim 或安装时间太长。我的情况是使用 MySQL 5.7 映像,当我想要更改my.cnf
文件时,没有vim
, vi
,并且 Vim 安装时间太长(中国防火墙)。sed
图片中提供了,非常简单。我的用法就像
sed -i /s/testtobechanged/textwanted/g filename
使用man sed
或寻找其他教程以了解更复杂的用法。
如果您使用 Windows 容器并且想要更改任何文件,则可以在 Powershell 控制台中轻松获取和使用 Vim。
使用 PowerShell 封装到 Windows Docker 容器:
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
归档时间: |
|
查看次数: |
342232 次 |
最近记录: |