mysql泊坞窗图片的文档说明:
第一次启动容器时,它将执行扩展名为.sh和.sql的文件,这些文件位于/docker-entrypoint-initdb.d中。您可以通过将SQL转储装入该目录并使用提供的数据提供自定义映像来轻松填充您的mysql服务。
首先,我在docker-compose.yml
:
version: '2'
services:
db:
image: mysql:5.7
volumes:
- .:/docker-entrypoint-initdb.d:ro
当我运行docker-compose build
和docker-compose up
时,创建了容器并执行了当前目录中的sql文件。到目前为止一切都很好。
但是,如果我想将这些容器部署到另一台计算机上(使用docker-machine
),则将/docker-entrypoint-initdb.d
作为卷进行挂载将无法正常工作,因为该计算机无法访问我机器的.
目录。
然后我尝试扩展mysql:5.7
图像:
FROM mysql:5.7
COPY ./*.sql /docker-entrypoint-initdb.d/
在docker-compose.yml
version: '2'
services:
db:
build:
context: .
dockerfile: Dockerfile
然而,当我在第二台计算机上运行docker-compose build
和docker-compose up
并尝试运行我的应用程序时,当前目录中的*.sql
个文件不是执行即可。我的表都没有创建。
为什么我的第二种方法不起作用?
修改 啊,等等。我提出了错误的问题。问题不在于第二种方法不起作用,而是在Virtualbox中运行的本地docker-machine上运行第二种方法时,第二种方法不起作用。当我在我的主机上使用它时(即不使用docker-machine),第二种方法实际上有效。
答案 0 :(得分:0)
我发现了这个问题。问题是我认为docker-compose rm -f
销毁了附在容器上的任何卷,但我错了。所以我认为是第一个:ed容器实际上是使用早期创建的数据库。所以sql文件没有运行,因为它实际上不是容器第一次启动。咄。谢谢Ken指出我正确的方向。
事实证明,即使使用docker-compose rm -v
也不会删除卷。我必须使用docker volume ls
列出它们,然后使用docker volume rm <volume>
手动删除它们。
答案 1 :(得分:0)
另一种特定于Docker的清理卷的方法:
docker system prune
这将删除悬空图像,容器,卷和网络。添加-a
也会删除过期的容器和当前未使用的图像。