我有一个运行wordpress安装的docker镜像。该图像通过执行apache服务器作为默认命令。因此,当您停止apache服务时,容器将退出。
麻烦服务器配置搞乱后问题出现了。容器无法启动,我无法恢复图像内容。
我的选择是覆盖容器运行的命令或将上次文件系统更改还原为以前的状态。
这些事情有可能吗?替代?
答案 0 :(得分:2)
如果您只想复制内容,可以使用下面的命令以及更具体的路径。
sudo docker cp containername:/ var / / varbackup /
https://docs.docker.com/reference/commandline/cli/#cp
也可以从主机访问文件系统。运行下面的命令,在底部的卷部分中,它应该有一个存储文件系统修改位置的路径。
这不是一个好的永久解决方案。
docker inspect containername
如果稍后重新创建容器,则应考虑将数据保留在容器之外,并在创建容器时将其作为虚拟路径链接到容器中。如果您将apache配置文件链接到容器中,则可以在容器未运行时对其进行编辑
管理容器中的数据
http://docs.docker.com/userguide/dockervolumes/
编辑1:不建议将此作为最佳做法,但它应该有效
这应该显示主机上apache2.conf的路径
将some-wordpress替换为您的容器名称。
CONTAINER_ID=$(docker inspect -f '{{.Id}}' some-wordpress)
sudo find /var/lib/docker/ -name apache2.conf | grep $CONTAINER_ID
答案 1 :(得分:1)
使用docker run
启动容器时,可以提供在容器内运行的命令。这将覆盖图像中指定的任何命令。例如:
docker run -it some/container bash
如果您修改了容器中的配置,则不会影响图像的内容。所以你可以恢复文件系统的变化"只需从原始图像中启动一个新容器...在这种情况下,您仍然可以使用原始图像。
如果您使用docker commit
命令生成包含您在容器中所做更改的 new 图像,则容器内部更改的唯一方法会影响图像。
答案 2 :(得分:1)
有多种方法可以覆盖泊坞窗图像的默认命令。这里有两个:
docker run
覆盖它作为最后一个参数给你想要运行的命令(及其参数)(Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
)使用BASE
图片创建一个包装图片,将其覆盖为CMD
或ENTRYPOINT
。实施例
FROM my_image
CMD ["my-new-cmd"]
此外,您可以尝试以不同方式还原更改:
docker build
进程。docker history <IMAGE_NAME>:tag
,找到所需提交的IMAGE_ID,然后运行提交的提交或标记您希望的名称(和标记)(如果要覆盖标记名称,则使用-f
选项)。例如: $ docker history docker_io_package:latest
$ docker tag -f c7b38f258a80 docker_io_package:latest
答案 3 :(得分:0)
如果它需要用一组参数启动一个命令,例如
ls -al /bin
尽量做到这一点
docker run --entrypoint ls -it debian /bin -al
其中 ls
在 --entrypoint
之后,所有参数都放在图像名称之后