请考虑以下 Dockerfile:
FROM phusion/baseimage
VOLUME ["/data"]
RUN touch /data/HELLO
RUN ls -ls /data
问题:“/data”目录不包含“HELLO”文件。此外,任何其他写入卷目录的尝试(通过 echo、mv、cp...)都不会成功 - 该目录始终为空。没有显示错误消息。
我在文档或 stackoverflow 上找不到有关此问题的任何内容。
这是众所周知的还是新的事情?
docker version
返回:
Client version: 1.2.0
Client API version: 1.14
Go version (client): go1.3.1
Git commit (client): fa7b24f
OS/Arch (client): linux/amd64
Server version: 1.2.0
Server API version: 1.14
Go version (server): go1.3.1
Git commit (server): fa7b24f
Dockerfile 的每个步骤都在其自己的容器中运行,该步骤完成后该容器将被丢弃,并且当命令完成后删除最后一个(仅在本例中)使用卷的容器时,卷将被丢弃。这使得卷不太适合在 Dockerfile 中使用因为他们中途丢失了内容。 Docker 文件旨在能够在任何地方运行,如果它们使用持续存在的卷,则会变得更加困难。另一方面,如果您确实想要这样做,只需在主机上使用目录备份卷即可。
PS:初始化主机的数据目录最好在 Docker 文件之外完成。
上次我需要这个时,我在 docker 文件中省略了这一步,因为这一步的想法是准备host运行此 Dockerfile 生成的镜像。然后我使用 docker run 创建了一个容器,并在该容器中运行了通常的数据库设置内容。
docker run -v /var/lib/mysql:/raid/.../mysql ...
/usr/bin/mysql_install_db
mysql_secure_installation
现在,当此容器移动到新主机时,可以随身携带该数据目录,也可以使用该主机上的相同进程创建该数据目录。或者,如我的示例所示,如果您想要另一个 mysql 数据库用于其他应用程序,则无需重复创建容器。
重要的想法是将容器创建和主机设置分开。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)