MySQL 图像忽略 docker-compose.yml 的卷配置

MySQL image ignores volume configuration of docker-compose.yml

使用官方MySQL Docker镜像,我不明白如何将数据目录挂载到主机上的特定点。 The Dockerfile 个图像集

VOLUME /var/lib/mysql

因此数据库数据应存储在主机上 "somewhere"。我想在我的 docker-compose 文件中更加具体,所以我尝试了以下操作:

mysql:
  image: mysql:5.7
  environment:
    - MYSQL_ROOT_PASSWORD=password
    - MYSQL_DATABASE=mydb
  volumes:
    - ./database/mysql:/var/lib/mysql

docker-compose up 开始一切正常,但主机上的 ./database/mysql 目录保持为空,而容器中的 /var/lib/mysql 包含数据。我的配置有问题吗?还是我误解了卷的使用方法?

docker-compose 将始终尝试保留数据卷,这样您就不会丢失其中的任何数据。如果您从数据卷开始,然后更改为主机卷,您仍然可以获得数据卷。

要更正此问题,运行 docker-compose stop && docker-compose rm -f,这将删除您的容器和数据卷(这将删除数据卷中的所有数据)。在接下来的 docker-compose up 中,您应该会看到它正在使用主机卷。

编辑:从 Compose 1.6 开始,您可以 运行 docker-compose stop -v 而不是上面的两个命令。