使用docker compose时,docker-entrypoint-initdb.d中的文件永远不会被执行

我在Windows 10上使用Docker Toolbox

我可以通过http://192.168.99.100:8000成功访问php部分,我一直在使用mariadb部分,但仍然有几个问题

我有一个sql文件作为/mariadb/initdb/abc.sql所以我应该被复制到/docker-entrypoint-initdb.d,创建容器后我使用docker-compose exec mariadb来访问容器,有文件作为/docker-entrypoint-initdb.d/abc.sql,但文件永远不会执行,我也测试过手动将sql文件导入容器,这是成功的,所以sql文件是有效的

我不太了解数据文件夹映射,以及如何使文件夹与容器同步,我总是在使用docker-compose up -d重新创建容器时收到警告

警告:服务“mariadb”正在使用上一个容器中的卷“/ var / lib / mysql”.主机映射“/…/mariadb/data”无效.删除现有容器(使用docker-compose rm mariadb)以使用重新创建数据库…完成

问题

>如何获取/docker-entrypoint-initdb.d中的sql文件?
>使用mariadb容器映射数据文件夹的正确方法是什么?

请指导
谢谢

这是我的docker-compose.yml

version: "3.2"
services:
    php:
        image: php:7.1-apache
        container_name: web
        restart: always
        volumes:
            - /.../php:/var/www/html
        ports:
            - "8000:80"
    mariadb:
        image: mariadb:latest
        container_name: db
        restart: always
        environment:
            - MYSQL_ROOT_PASSWORD=12345
        volumes:
            - /.../mariadb/initdb:/docker-entrypoint-initdb.d
            - /.../mariadb/data:/var/lib/mysql
        ports:
            - "3306:3306"
最佳答案
对我来说,问题是Docker没有清理以前运行的挂载卷.

做一个:

docker volume ls

将列出任何卷,如果以前存在,则在卷上运行’rm’命令将其删除.

如docker mysql docks所述,’/docker-entrypoint-initdb.d’文件夹中的脚本仅在容器第一次运行时才会被评估,如果前一个卷保留,它将不会运行脚本.

至于映射,您只需将脚本文件夹挂载到映像中的“/docker-entrypoint-initdb.d”文件夹:

volumes:
   - ./db/:/docker-entrypoint-initdb.d

我在一个名为db的文件夹中有一个脚本文件,相对于我的docker-compose文件.

转载注明原文:使用docker compose时,docker-entrypoint-initdb.d中的文件永远不会被执行 - 代码日志