尝试修复错误并调试我的应用程序分解几个容器的问题,我经常编辑容器中的文件:
或者我完全懒惰并安装nano并直接在容器或编辑
我将文件停靠在容器中,编辑它,将其复制回来并重新启动容器
这些是进入容器构建的新内容之前的中间步骤,这比上面做的要花费更长的时间(当然这只是中间/摆弄).
现在我经常打破容器的启动程序,在破坏的情况下,它是节点脚本或python webserver脚本,两者通常都会因语法错误而失败.
有没有办法保存这些容器?由于他们没有开始,我不能将码头执行者带入他们,因此他们失去了我.然后我在构建输入中修复有问题的文件之后去rm/rmi/build/run路由.
我怎样才能编辑已停止的容器中的文件,或者将它们cp放入或在已停止的容器中启动shell - 允许我修复此容器的任何内容?
(这似乎有点像在远程计算机上工作并破坏网络配置 - 连接以这种方式"永远"丢失,如果存在则必须使用后备.)
如何从主机编辑Docker容器文件?看起来很相关,但已经过时了.
小智 70
我遇到了一个容器的问题,由于我所做的配置更改错误而无法启动.我能够将文件从已停止的容器中复制出来并进行编辑.就像是:
docker cp docker_web_1:/etc/apache2/sites-enabled/apache2.conf .
Run Code Online (Sandbox Code Playgroud)
(更正文件)
docker cp apache.conf docker_web_1:/etc/apache2/sites-enabled/apache2.conf
Run Code Online (Sandbox Code Playgroud)
And*_*iff 50
回答我自己的问题..仍然希望得到一个更知识渊博的人更好的答案!
有两种可能性.
1)直接在主机上编辑文件系统.这有点危险,并且有可能完全打破容器,可能还有其他数据,具体取决于出了什么问题.
2)将启动脚本更改为永不失败的内容,例如启动bash,执行修复/编辑,然后再次将启动程序更改为所需的启动程序(如节点或之前的任何内容).
更多细节:
1)使用
docker ps
Run Code Online (Sandbox Code Playgroud)
找到正在运行的容器或
docker ps -a
Run Code Online (Sandbox Code Playgroud)
找到所有容器(包括已停止的容器)和
docker inspect (containername)
Run Code Online (Sandbox Code Playgroud)
寻找"Id",这是第一个价值观之一.
这是包含实现细节的部分,可能会更改,请注意您可能会以这种方式丢失容器.
去
/var/lib/docker/aufs/diff/9bc343a9..(long container id)/
Run Code Online (Sandbox Code Playgroud)
在那里你会发现所有文件都朝向容器所基于的图像改变.您可以覆盖文件,添加或编辑文件.
再说一遍,我不推荐这个.
2)如/sf/answers/2264719411/所述,您可以在类似的路径中找到配置json config.json
/var/lib/docker/containers/9bc343a99..(long container id)/config.json
Run Code Online (Sandbox Code Playgroud)
在那里你可以将args从例如"nodejs app.js"更改为"/ bin/bash".现在重新启动docker服务并启动容器(您应该看到它现在正确启动).你应该用
docker start -i (containername)
Run Code Online (Sandbox Code Playgroud)
确保它不会立即退出.您现在可以使用容器和/或稍后附加
docker exec -ti (containername) /bin/bash
Run Code Online (Sandbox Code Playgroud)
此外,docker cp对于复制在容器外编辑的文件非常有用.
此外,如果容器或多或少"丢失",那么应该只回到这些措施,因此任何改变都将是一种改进.
Tej*_*ade 12
您可以直接编辑容器文件系统,但我不知道这是否是一个好主意。首先,您需要找到用作容器运行时根目录的目录路径。运行docker container inspect id/name。UpperDir在 JSON 输出中查找密钥。
那是你的目录。
| 归档时间: |
|
| 查看次数: |
47567 次 |
| 最近记录: |