首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用docker组合时,不会执行docker-entrypoint-initdb.d中的文件。

问当使用docker组合时,不会执行docker-entrypoint-initdb.d中的文件。
EN

Stack Overflow用户
提问于 2017-10-03 02:29:28
回答 2查看 11.9K关注 0票数 8

我在Windows 10上使用Docker工具箱

我可以通过http://192.168.99.100:8000成功地访问php部件,我一直在使用mariadb部件,但仍然存在一些问题。

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

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

WARNING: Service "mariadb" is using volume "/var/lib/mysql" from the previous container. Host mapping "/.../mariadb/data" has no effect. Remove the existing containers (with docker-compose rm mariadb) to use the Recreating db ... done

问题

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

请指点,谢谢

这是我的docker-compose.yml

代码语言:javascript
复制
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"
EN

回答 2

Stack Overflow用户

发布于 2018-04-01 19:19:57

对我来说,问题是Docker没有清理我以前运行时安装的卷。

做:

代码语言:javascript
复制
docker volume ls

将列出任何卷,如果以前存在,则在卷上运行“rm”命令以删除它。

正如docker 码头中所述,'/docker-entrypoint-initdb.d‘文件夹中的脚本仅在容器第一次运行时进行评估,如果之前的卷仍然存在,则不会运行脚本。

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

代码语言:javascript
复制
volumes:
   - ./db/:/docker-entrypoint-initdb.d

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

票数 7
EN

Stack Overflow用户

发布于 2020-05-25 11:38:15

在创建mariaDB的Docker文件中,最后将abc.sql文件添加到码头入口点,如下所示:

代码语言:javascript
复制
COPY abc.sql /docker-entrypoint-initdb.d/

删除- /.../mariadb/initdb:/docker-entrypoint-initdb.d映射,因为复制到入口点的任何文件都将被执行。

注意: Windows容器不会在docker-entrypoint-initdb.d/中执行任何操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46536361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档