如何覆盖默认的docker容器命令或恢复到以前的容器状态?
我有一个运行wordpress安装的docker镜像。 图像通过默认命令执行apache服务器。 所以,当你停止Apache服务的容器退出。
问题出现在搞乱了Apache服务器configuration之后。 容器无法启动,我无法恢复图像内容。
我的select是覆盖容器运行的命令或将最后的文件系统更改恢复到以前的状态。
这些事情有可能吗? 备择scheme?
如果你只是想复制内容,你可以使用下面的命令更具体的path。
sudo docker cp容器名:/ var / / varbackup /
https://docs.docker.com/reference/commandline/cli/#cp
文件系统也可以从主机访问。 运行下面的命令,并在底部的卷部分,它应该有一个path来存储您的文件系统修改。
这不是一个好的永久解决scheme。
docker工检查容器名称
如果稍后重新创build容器,则应在创build容器时考虑将数据保留在容器外部,并将其作为虚拟path链接到容器中。 如果以这种方式将apacheconfiguration文件链接到容器中,则可以在容器未运行时对其进行编辑
在容器中pipe理数据
http://docs.docker.com/userguide/dockervolumes/
编辑1:不build议这是最好的做法,但它应该工作。
这应该显示主机上的apache2.conf的path。
用你的容器名称replace一些wordpress。
CONTAINER_ID=$(docker inspect -f '{{.Id}}' some-wordpress) sudo find /var/lib/docker/ -name apache2.conf | grep $CONTAINER_ID
使用docker run
启动容器时,可以提供一个在容器内运行的命令。 这将覆盖图像中指定的任何命令。 例如:
docker run -it some/container bash
如果您修改了容器内的configuration,则不会影响图像的内容。 所以你可以“恢复文件系统的变化”,只需从原始图像中启动一个新的容器…在这种情况下,你仍然有原始图像可用。
如果您使用docker commit
命令生成包含您在容器中所做更改的新映像,则容器内部更改的唯一方式将影响映像。
重写Docker镜像的默认命令有不同的方法。 在这里你有两个:
- 如果你有一个默认的CMD命令的图像,你可以简单地在
docker run
覆盖它作为你想运行的命令(使用它的参数)的最后一个参数(Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
) -
使用
BASE
图像创build一个包装图像,您想要覆盖CMD
或ENTRYPOINT
。 例FROM my_image CMD ["my-new-cmd"]
另外,您可以尝试以不同的方式恢复更改:
- 如果你有想要恢复的镜像的Dockerfile,可以简单地将更改重写到Dockerfile中,然后再次运行docker
docker build
过程。 - 如果您没有Dockerfile,并且您构build了提交更改的图像,则可以使用
docker history <IMAGE_NAME>:tag
,find所需提交的IMAGE_ID,然后运行提交的提交或标签(和标签)(如果您正在重写标签名称,则使用-f
选项)。 例:
$ docker history docker_io_package:latest
$ docker tag -f c7b38f258a80 docker_io_package:latest