如何覆盖默认的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镜像的默认命令有不同的方法。 在这里你有两个:

  1. 如果你有一个默认的CMD命令的图像,你可以简单地在docker run覆盖它作为你想运行的命令(使用它的参数)的最后一个参数( Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  2. 使用BASE图像创build一个包装图像,您想要覆盖CMDENTRYPOINT 。 例

    FROM my_image CMD ["my-new-cmd"]

另外,您可以尝试以不同的方式恢复更改:

  1. 如果你有想要恢复的镜像的Dockerfile,可以简单地将更改重写到Dockerfile中,然后再次运行docker docker build过程。
  2. 如果您没有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