想在正在运行的Docker容器中使用卷

我有一个docker容器,目前正在我的Ubuntu服务器上运行。

容器基本上运行nginx和mysql,但目前它没有使用卷,所以如果我摧毁容器,我的数据不见了。

DockerFile更新了以下内容:

VOLUME ["/var/lib/mysql", "/opt/nginx/www"] 

我想在我的主机上创build以下文件夹,如:

 /home/ubuntu/container_data/container1/mysql /home/ubuntu/container_data/container1/www 

我如何启动一个容器,并使用上面创build的2个文件夹用于mysql和我的nginx / www文件。

我很困惑VOLUME命令在DockerFile里面做了什么,以及-v命令在启动容器时做了什么。 他们有什么关系? 真的希望有人能为我解释这一点。

另外,是否有可能使用已经运行的容器来做到这一点,或者我将不得不停止并销毁当前使用卷设置的容器b / c?

我如何启动一个容器,并使用上面创build的2个文件夹用于mysql和我的nginx / www文件。

 docker run -v /home/ubuntu/container_data/container1/mysql:/var/lib/mysql -v /home/ubuntu/container_data/container1/www:/opt/nginx/www image_name 

上面的命令会在运行时将主机目录挂载为容器中的数据卷。 -v标志的模式是:

 -v /path/on/host:/path/in/container 

我很困惑VOLUME命令在DockerFile里面做了什么,以及-v命令在启动容器时做了什么。 他们有什么关系? 真的希望有人能为我解释这一点。

我相信在Dockerfile中声明一个卷在function上等同于使用-v CLI标志,如下所示:(更正欢迎)

 docker run -v /data image_name VOLUME /data 

创build容器时创build卷的装入点。 来自Docker docs的更多信息

在使用export命令将其销毁之前,您可以从现有容器中检索文件。

我很困惑VOLUME命令在DockerFile里面做了什么,以及-v命令在启动容器时做了什么。 他们有什么关系? 真的希望有人能为我解释这一点。

Dockerfile中的VOLUME命令只是将目录标记为“不是容器文件系统的一部分”,这样它的内容将不会包含在生成的图像中,也不会在运行docker commit时被docker commit 。 它还使目录可用于以--volumes-from参数启动的其他容器。

-v命令行选项在给定简单path名时与VOLUME命令执行相同的操作。 当给定一个hostpath:containerpath参数时,在containerpath.的containerpath中装载指定的hostpath containerpath. 无论哪种情况,卷都可以通过--volumes-from到其他容器。

为了使用-v命令行选项,在Dockerfile中没有必要使用VOLUME指令,但是在任何情况下都会清楚地标识数据目录。

对于你的两个目录:

 /home/ubuntu/container_data/container1/mysql /home/ubuntu/container_data/container1/www 

你会:

 docker run \ -v /home/ubuntu/container_data/container1/mysql:/var/lib/mysql \ -v /home/ubuntu/container_data/container1/www:/opt/nginx/www \ ...